繁体   English   中英

Asp.net核心2 AuthenticationProperties存储jwt令牌

[英]Asp.net core 2 AuthenticationProperties storing jwt tokens

我试图更好地理解如何存储jwt令牌(id,access,refresh)。 添加OpenIdConnect时,您可以设置的其中一个选项是保存令牌。 使用以下配置,每当用户登录时,都会生成jwt令牌(无需单独调用授权端点来检索令牌)。

.AddOpenIdConnect("Test", options => {  
                options.SaveTokens = true;
}

根据我的阅读,它们保存在与ClaimsPrincipal一起返回的AuthenticationProperties集合中。 您可以通过HttpContext.GetTokenAsync检索它们。

示例如下:

var accessToken = await HttpContext.GetTokenAsync("access_token");

我想了解更多关于如何存储和检索这些值的信息。 我知道,claimforelimin是与用户相关的身份/声明的集合。 但是如何设置身份验证属性? 如何单独访问身份验证属性集合? 是否有可用于直接访问类属性的类/接口? 我没有在ClaimsPrincial类中看到有关身份验证属性的任何信息。

此外,由于访问令牌存储在身份验证属性中,更新值的唯一方法是重新进行身份验证(即挑战用户再次登录)? 我该如何更新价值? 或者最好提取值将其存储在其他位置进行更新?

我自己一直在研究这个问题。 OpenID Connect中间件似乎通常通过SignInScheme选项指定的第二个cookie身份验证方案将数据保存到已签名的cookie中。 使用显式配置的示例扩展您的示例:

.AddOpenIdConnect("Test", options => {  
    options.SignInScheme = "MyCookieScheme";
    options.SaveTokens = true;
}

此示例意味着还使用以下调用设置了cookie身份验证方案:

.AddCookie("MyCookieScheme")

从SignInScheme的文档注释:

获取或设置与成功验证后负责持久保存用户身份的中间件相对应的身份验证方案。 此值通常对应于Startup类中注册的cookie中间件。 省略时,Microsoft.AspNetCore.Authentication.AuthenticationOptions.DefaultSignInScheme用作回退值。

(请注意,此属性实际上来自OpenIdConnectOptions扩展的RemoteAuthenticationOptions类)

跟踪默认设置方案中您没有明确提供cookie身份验证方案的情况有点棘手,但我想它默认设置一个,或依赖于那里的一个。 另外,我想在理论上,任何其他类型的身份验证方案都可以用于此持久性(例如您自己的JWT发布和签名方案),但我还没有看到任何这样的示例。

至于实际存储在cookie中的内容以及它是如何通过OpenID Connect中间件放到那里的,你可能需要大量挖掘所有代码才能确保工作 - 所有这些的具体细节 - 级别的中间件似乎还没有被记录。 我所知道的是,DataProtection中间件涉及加密cookie的内容。

您可以考虑解密cookie本身以查看其中的内容 - 请参阅此处的答案: 如何手动解密ASP.NET核心身份验证cookie?

(哦,为了记录,所有这些示例都基于ASP.NET Core v2.0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM