我可以获得OWIN cookie并解密它以在BeginRequest中获得它的声明吗?
我在现有网站中实施新的ASP.NET Identity 2.0 Framework使用CA的Identity Minder,主要使用Request.ServerVariables为所有控件提供支持。
我想要做的是使用与HTTP处理程序在BeginRequest事件中的每个请求中使用相同的变量填充请求标头,但使用新的标识提供程序。
我知道在BeginRequest事件中,我可以从客户端读取cookie,并且我知道我可以检查OWIN cookie是否在那里(名为.AspNet.ApplicationCookie),但我不知道如何解密cookie到从中获得索赔。
我也尝试这样做来阅读索赔:
Dim identity = CType(Thread.CurrentPrincipal, ClaimsPrincipal)
Dim claim = identity.Claims.SingleOrDefault(Function(c) c.Type = ClaimTypes.Name)
但是,当我这样做时,我没有得到任何值,所以我假定Thread.CurrentPrincipal在请求管道中没有提前填充。
但是,该代码确实有效
Dim application As HttpApplication = DirectCast(sender, HttpApplication)
Dim cookie = application.Context.Request.Cookies(".AspNet.ApplicationCookie")
If cookie Is Nothing Then
HttpContext.Current.Request.Headers.Add("SM_SERVERSESSIONID", "NOT Logged in")
Else
HttpContext.Current.Request.Headers.Add("SM_SERVERSESSIONID", "Logged in")
End If
考虑到我可以访问cookie,我想知道是否有任何方法可以解密它,这样我就可以读取我在其中设置的声明。
以下是我如何在登录页面上设置我的声明:
Dim claims = New List(Of Claim)()
claims.Add(New Claim(ClaimTypes.Name, user.UserName))
claims.Add(New Claim(ClaimTypes.Email, user.Email))
Dim id = New ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie)
authenticationManager.SignIn(id)
你不需要自己解密这个cookie。 你只需要检查用户是否被授权并获得现有的声明。
请尝试这样的事情:
var claimsIdentity = User.Identity as ClaimsIdentity;
if (claimsIdentity != null)
{
Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);
if (providerKeyClaim != null)
{
var name = claimsIdentity.FindFirstValue(ClaimTypes.Name);
var email = claimsIdentity.FindFirstValue(ClaimTypes.Email);
}
}
链接地址: http://www.djcxy.com/p/22127.html
上一篇: Can I get the OWIN cookie and decrypt it to get claims from it in BeginRequest?