客户端仅请求特定范围的访问令牌。这些范围是资源的一部分,确保访问令牌只能由某些受众使用。 IDP 忽略声明的原因是 IDP 不是资源的一部分。
如果您想使用 Api 端点扩展 IDP,例如对于客户端必须可以访问的类似管理员的功能,那么您可以像任何其他 api 一样配置它。如果允许客户端请求范围,则声明将成为访问令牌的一部分,并且作为受众,IDP 将看到声明。
但是对于 IDP 上的视图/页面,您可以简单地使用 cookie。登录时,您可以将这些声明添加到本地 cookie。
在代码中,您可以像往常一样使用授权。您可以定义策略并使用过滤器和属性。
假设用户是“管理员组”的一部分,那么您可以在登录时将此角色添加到 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")]