我正在做一个使用IdentityServer4、Identity和应用程序接口的项目。
该接口受IDS4保护。
API和IDS4在同一个项目中,所以我的解决方案中有3个项目:-包含IdentityServer和API的MVC web项目-使用MongoDB作为数据库提供程序的Identity实现-模拟客户端的控制台应用程序
我的客户端使用IDS4进行身份验证,获取access_token,然后使用令牌调用应用程序接口。这部分运行得很好。
现在,我被要求在调用api中的特定操作时向令牌添加一些声明。
我已经在谷歌上搜索过了,但我找不到任何解决方案,我也不确定这是不是一个好主意。API是否可以通过添加一些声明来修改接收到的访问令牌,然后将令牌发回?
另一种选择是发送另一个令牌作为响应,但我找不到使用RS512对令牌进行签名的方法。
提前感谢
发布于 2018-12-05 19:19:14
您可以使用IProfileService添加额外的索赔
public class ProfileService : IProfileService
{
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
string subject = context.Subject.Claims.ToList().Find(s => s.Type == "sub").Value;
try
{
// Get Claims From Database, And Use Subject To Find The Related Claims, As A Subject Is An Unique Identity Of User
//List<string> claimStringList = ......
if (claimStringList == null)
{
return Task.FromResult(0);
}
else {
List<Claim> claimList = new List<Claim>();
for (int i = 0; i < claimStringList.Count; i++)
{
claimList.Add(new Claim("role", claimStringList[i]));
}
context.IssuedClaims = claimList.Where(x => context.RequestedClaimTypes.Contains(x.Type));
return Task.FromResult(0);
}
}
catch
{
return Task.FromResult(0);
}
}
public Task IsActiveAsync(IsActiveContext context)
{
return Task.FromResult(0);
}
}在“启动”文件中注册服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()..Services.AddTransient<IProfileService, ProfileService>();
}https://stackoverflow.com/questions/53537592
复制相似问题