IIdentity,IPrincipal,OWIN,IdentityUser和IUser <string>如何组合在一起?

Jam*_*mes 4 .net asp.net authentication asp.net-mvc owin

我正在努力弄清楚哪些.Net认证概念在OWIN的世界中仍然相关,现在已经过时了.从OWIN之前的ASP.Net时代开始,我习惯于处理.Net结构:FormsAuthentication,FormsAuthCookie,IPrincipal,IIdentity以及IPrincipal的自定义实现(继承自GenericPrincipal).使用最新版本的MVC(5),许多身份验证似乎已经改为基于OWIN.我特别想要了解的两件事:

1)IPrincipal和IIdentity以及GenericPrincipal在哪里适合? 使用FormsAuthentication,自定义数据可以存储在FormsAuth cookie中.然后,可以在ASP.Net PostAuthenticate事件中使用它来创建CustomPrincipal对象,并覆盖HTTPContext上的默认IPrincipal(下面的代码示例).OWIN如何(或确实)改变了这个?:

protected void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
{
    //Decrypt forms authentication cookie and retrieve some userdata        

    ...

    //Create CustomPrincipal (which inherits from GenericPrincipal)
    var principal = new CustomPrincipal(userId, roles, someAdditionalUserDataFromCookie);

    //Replace standard IPrincipal object on HTTPContext with custom principal
    HttpContext.Current.User = newUser
}
Run Code Online (Sandbox Code Playgroud)

2)哪里可以存储自定义身份验证数据?在OWIN之前的日子里,我使用AuthCookie的UserData值来存储自定义标识信息(除了用户名) - 例如OrgID.现在可以将它存储为ClaimsIdentity对象中的声明吗?这是一个好主意吗?它仍然可以存储在AuthenticationTicket中吗?我看这一切都错了吗?!

谢谢你的帮助.

Bad*_*dri 9

您将使用CookieAuthenticationMiddleware而不是FormsAuthenticationModule.CookieAuthenticationMiddleware仍然使用身份验证票证创建cookie但格式不同.因为CookieAuthenticationMiddleware,事物是为从头开始的索赔而设计的.因此,默认情况下,尽管这些类实现了,但仍然可以ClaimsPrincipal使用.ClaimsIdentityIPrincipalIIdentity

关于自定义身份验证数据,将它们存储为身份的声明部分.关于新世界的一个好处是,您不再需要PostAuthenticate根据故障单中的自定义数据来恢复您的主体.如果你打电话之前,所有必需的声明创建您的身份SignIn,CookieAuthenticationMiddleware负责身份的序列化要求部分进入该cookie并返回到其全部的身份票.此外,您不会HttpContext.Current.User用来阅读校长.您将使用请求对象上提供的扩展方法从OWIN上下文中读取,如下所示.

Request.GetOwinContext().Authentication.Userreturn ClaimsPrincipal Request.GetOwinContext().Request.User返回与上面相同但是asIPrincipal

从控制器,您可以使用User哪个IPrincipal,它再次从上下文返回一个.