我使用indentiyserver4实现了一个身份提供者来验证我的API,我想知道IDP是否有可能对本身进行身份验证。目前,当我发送access_token到我的国内流离失所者,我没有收到任何索赔。我想添加身份验证,以便只允许管理员管理用户。
发布于 2020-06-21 06:46:53
客户端只为某些作用域请求访问令牌。这些作用域是资源的一部分,确保访问令牌只能由特定的受众使用。IDP忽略声明的原因,是因为IDP不是资源的一部分。
如果您想用api端点扩展IDP,例如,对于客户端必须访问的类似Admin的功能,那么您可以像配置任何其他Api一样配置它。如果允许客户端请求作用域,那么声明将成为访问令牌的一部分,并且,作为受众,IDP将看到声明。
但是对于IDP上的视图/页面,您可以简单地使用cookie。登录时,您可以将这些声明添加到本地cookie中。
在代码中,您可以像普通一样使用授权。您可以定义策略并使用筛选器和属性。
假设一个用户是'Admin组‘的一部分,那么您可以在登录到cookie时添加这个角色。
await HttpContext.SignInAsync(user.Id, user.UserName, new Claim("role", "Admin"));通过授权属性,您可以限制对IDP中的控制器的访问。您可以配置策略:
services
.AddAuthorization(options =>
{
options.AddPolicy("AdminRole", p => p.RequireRole("Admin"));
});并限制控制器级别的访问:
[Authorization("AdminRole")]使用方案指定授权是否使用承载令牌。
[Authorization("AdminRole", AuthenticationSchemes = "Bearer")]发布于 2020-06-21 03:18:32
您要寻找的是Authorization on IdentityServer。要实现这一点,不需要将access_token传递给IDS4,只需为需要授权的控制器/操作添加[Authorize]属性即可。很好的例子是快速启动上的ConsentController
https://stackoverflow.com/questions/62492341
复制相似问题