我可以得到OWIN cookie和解密它从它在BeginRequest中获得索赔



我正在实现新的ASP。. NET Identity 2.0框架在现有网站中使用CA的Identity Minder,它主要使用Request。ServerVariables为所有控件提供动力。

我想做的是用CA在BeginRequest事件中的每个请求中使用HTTP处理程序的相同变量填充请求头,但使用新的身份提供程序。

我知道在BeginRequest事件中我可以从客户端读取cookie,我知道我可以检查OWIN cookie是否存在(命名为。aspnet . applicationcookie),但我不知道如何解密cookie以获得声明。

我也试着这样做来阅读索赔:

Dim identity = CType(Thread.CurrentPrincipal, ClaimsPrincipal)
Dim claim = identity.Claims.SingleOrDefault(Function(c) c.Type = ClaimTypes.Name)

当我这样做的时候,然而,我没有得到任何值,所以我假设线程。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);
    }
}

相关内容

  • 没有找到相关文章

最新更新