Rob*_*aft 6 oauth claims-based-identity
在我看来,我无法在我第一次调用Identity Server的响应中添加自定义声明(这是特定于用户的).有人可以证实这个假设吗?
以下是我们在应用程序中的操作:使用ResourceOwner Flow,我们的Web应用程序(服务器端)调用Identity Server发送用户的logonID,密码和范围.
我们找回一个包含sub,idp,client_id等标准声明的JWT; 但我们想补充一点.为简化起见,假设另一个声明是用户的emailAddress.
看来我们必须再次调用Identity Server并获取一个新令牌.那是对的吗?是不是有某些方法可以在初始调用中获得该值?
很抱歉成为回答我自己的问题的人,但我发现了如何使这项工作.
在您的IUserService覆盖中,在GetProfileDataAsync中添加以下代码:
if (context.RequestedClaimTypes != null)
{
List<Claim> newclaims = new List<Claim>();
foreach (Claim claim in context.Subject.Claims)
{
if (context.RequestedClaimTypes.Contains(claim.Type))
{
newclaims.Add(claim);
}
}
context.IssuedClaims = newclaims;
}
return Task.FromResult(context.IssuedClaims);
Run Code Online (Sandbox Code Playgroud)最后,为了确保每次用户登录时都会触发GetProfileDataAsync,而不仅仅是第一次,请确保您没有启用缓存.这可能意味着删除启动中的一行代码,如下所示:factory.ConfigureUserServiceCache().
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |