gpt4 book ai didi

asp.net - 我可以获取 OWIN cookie 并将其解密以在 BeginRequest 中从中获取声明吗?

转载 作者:行者123 更新时间:2023-12-02 20:57:55 25 4
gpt4 key购买 nike

我正在使用 CA 的 Identity Minder 在现有网站中实现新的 ASP.NET Identity 2.0 框架,该框架主要使用 Request.ServerVariables 来支持所有控件。

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

我知道在 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);
}
}

关于asp.net - 我可以获取 OWIN cookie 并将其解密以在 BeginRequest 中从中获取声明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com