【发布时间】:2019-08-08 15:26:38
【问题描述】:
身份服务器 4 在 id 令牌中返回的一些值存在问题。id 令牌和 userinfo 端点都返回用户名而不是名称来声明名称。
{
........
"preferred_username": "JohnD",
"name": "JohnD",
"email": "xxx@xxx.dk",
.....
}
如您所见,preferred_username 和 name 具有相同的值。如果我检查数据库。
- 用户名:JohnD
- 姓名:John Doe
- 邮箱:xxx@xxx.dk
我直接从身份服务器 4 复制了 DefaultProfileService.cs。
所以我的代码是一样的
/// <summary>
/// This method is called whenever claims about the user are requested (e.g. during token creation or via the userinfo endpoint)
/// </summary>
/// <param name="context">The context.</param>
/// <returns></returns>
public virtual Task GetProfileDataAsync(ProfileDataRequestContext context)
{
context.LogProfileRequest(Logger);
context.AddRequestedClaims(context.Subject.Claims);
context.LogIssuedClaims(Logger);
return Task.CompletedTask;
}
我可以看到 context.Subject.Claims 似乎已经填充了这些数据,我无法将其移除或覆盖它。
我不知道如何解决这个问题
更新
我尝试添加 preferred_username 声明,现在我得到双打。
"preferred_username": [
"John Doe",
"JohnD"
]
我还尝试从列表中删除声明,但它是只读的。
【问题讨论】:
-
您在 IS4 本身中使用什么来登录用户?例如身份还是其他?
-
Asp .net 身份与实体框架核心。
-
IS4 + Identity 集成注册了自己的
IProfileService,实际上只是使用UserClaimsPrincipalFactory。你可能需要在那里定制一些东西。 -
我从身份服务器项目中复制了默认的 DefaultProfileService.cs。它没有帮助。
标签: c# entity-framework asp.net-core oauth identityserver4