authentication - 如何从用户身份查看我添加到用户访问令牌的自定义声明?
问题描述
我需要访问在身份验证后添加到用户的自定义声明
在我的身份验证服务器中,我将自定义声明添加到响应中,如下所示
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
我遇到的问题是索赔永远不存在。
问题:
我需要做什么才能访问我的用户身份中的新声明?
解决方案
修复是从令牌服务的 /UserInfo 端点检索补充数据。
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
// stuff
options.Events.OnUserInformationReceived += context =>
{
// get UserInfo data from the context
var userInfo = JsonConvert.DeserializeObject<OpenIdConnectUserInfo>(context.User.RootElement.ToString());
// do stuff with the newly acquired info.
return Task.CompletedTask;
};
// go home and tell your kids you love them
});
推荐阅读
- airflow - 气流中的 Dag 脚本
- html - 为什么 jquery 选择器不能在所有存在与其选择器匹配的有效元素的情况下工作?
- ios - 为什么第二次不调用willDisplayCell
- excel - 制作公式时Excel VBA无效的过程调用或参数
- python-2.7 - 在 Python 中从列表创建多个有限制的列表
- haskell - Haskell:错误:无法将类型“[]”与“IO”匹配
- tensorflow - ROCm 和 CUDA GPU 在一个模型上?
- mysql - Mysql连接字符串如何设置+03时区?
- php - Yii第二个查询参数
- web2py - Web2Py 调度程序使 Postgress 数据库崩溃