【发布时间】:2021-04-20 00:57:22
【问题描述】:
我需要访问在身份验证后添加到用户的自定义声明
在我的身份验证服务器中,我将自定义声明添加到响应中,如下所示
public class MyProfileService : IProfileService
{
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var claims = new List<Claim>();
claims.Add(new Claim("MyNewClaim", "lol"));
context.IssuedClaims = claims;
在我的调用客户端上,我可以看到我在 OnTokenResponseReceived 中检查的原始令牌在我解码时具有声明
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Events.OnTokenResponseReceived += ctxt =>
{
ctxt.TokenEndpointResponse.AccessToken // <-- has raw token that contains claim
调用客户端有一个中间件组件,它试图从用户的身份中读取声明:
public async Task InvokeAsync(HttpContext context)
{
var claimsIdentity = (ClaimsIdentity)context.User.Identity;
var hasNewClaim = claimsIdentity.HasClaim(c => c.Type == "MyNewClaim"); // always false
我遇到的问题是索赔永远不存在。
问题:
我需要做什么才能访问我的用户身份中的新声明?
【问题讨论】:
-
您可能需要添加 ClaimAction 来映射您的自定义声明:leastprivilege.com/2017/11/15/…
-
看起来可以,但不幸的是没有。
-
将
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();添加到Startup中的`ConfigureServices` 怎么样? -
仍然没有成功。当我得到所有审查时,我将发布最终工作的内容。
标签: authentication oauth-2.0 access-token claims-based-identity jwt-auth