我想在验证的用户中存储额外的信息,以便我可以轻松访问它(例如User.Identity.Id),而不是仅仅是名称,因为我计划拥有非唯一的名称.
到目前为止,我已经收集到,我应该寻求实现自定义主体和/或身份,但我不知道如何去做.我一直在寻找关于这个问题的文档和教程,但是我在不同的地方找到了相关的东西,我发现它有点混乱.
我已经看到了如何在用户数据属性中的身份验证cookie中添加自定义信息,但是我想从单元测试中获得依赖注入的好处,我可以使用主体和身份.
如果我想实现自己的校长或身份,我需要考虑哪些具体步骤?
在这种情况下,我可以做的最简单(只需添加ID并保留所有默认值). “默认值”将包括默认提供程序(成员资格,角色等).
我已经看到了other question,但是我会欣赏不会有任何漏洞的答案,例如示例中AuthenticateRequest事件中的角色魔术字符串.相反,我需要知道如何将角色从默认的sqlRoleProvider添加到当前用户:何时和在哪里做,如果我需要做任何事情来连接我的新类与其他默认提供程序.
能够去一个示例ASP.NET MVC 2应用程序(例如,从visual studio 2010模板),这样做是很棒的,进行编辑并使其工作.
编辑:我已经编辑了这个问题,以便更好地表明我在这里丢失了很多,所以我无法做出太高级别的答案.
在我看来,在身份认同而不是委托人身上,更有意义的是,尽管我以前曾表示过这样的看法.
解决方法
以下问题已回答:
ASP.NET MVC – Set custom IIdentity or IPrincipal
ASP.NET MVC – Set custom IIdentity or IPrincipal
但是总结一下…
Public Class CustomPrincipal Inherits System.Security.Principal.GenericPrincipal Private _eyeColor As String Public ReadOnly Property EyeColor As String Get Return _eyeColor End Get End Property Public Sub New(id As System.Security.Principal.IIdentity,roles As String(),eyeColor As String) MyBase.New(id,roles) _eyeColor = eyeColor End Sub End Class
修改global.asax Global.Application_AuthenticateRequest以使用您的自定义主体:
Protected Sub Application_AuthenticateRequest(ByVal sender As Object,ByVal e As System.EventArgs) ... Dim roles() As String = {"examplerole"} Context.User = new CustomPrincipal(Context.User.Identity,roles,"green") End Sub
CType(My.User.CurrentPrincipal,CustomPrincipal).EyeColor