有两种应用:
最初我只实现了授权逻辑,使用以下代码:
serviceCollection
.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Audience = clientId;
options.Authority = authority;
});
我为我的控制器设置了 [AuthorizeAttribute] 并且授权逻辑工作正常。现在我需要在我的控制器中获取有关用户的信息。为此,我想使用 OpenID 信息。我通过添加 OpenID 连接修改了我的代码:
serviceCollection
.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Audience = clientId;
options.Authority = authority;
})
.AddOpenIdConnect(options =>
{
options.ClientId = clientId;
options.Authority = authority;
options.GetClaimsFromUserInfoEndpoint = true;
});
但我仍然只在我的控制器 (User.Identity) 中看到 access_token 声明。我错过了什么?
你有两个选择。
您可以将所需的声明添加到访问令牌(在 ApiScope 或 ApiResources 中),然后通过 API 中的 AddJwtBearer 进行访问。
或者,您可以获取访问令牌并将其发送到令牌自省端点,从响应中您可以获得有关用户的更多详细信息。您还可以使用访问令牌手动调用 userinfo 端点。但是,AddJWtBearer 不会为您调用这些端点。IdentityModel 中的辅助类可以帮助您做到这一点。
将 AddOpenIdConnect 添加到 API 中,只是为了获取用户详细信息是错误的做法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句