Asp.Net 核心未收到令牌

Asp.Net Core not receiving token

我已经使用 indentiyserver4 实现了一个身份提供者来验证我的 API。我想知道 IDP 是否可以验证 自身 。目前,当我将 access_token 发送给我的 IDP 时,我没有收到任何索赔。 我想添加身份验证以仅允许管理员管理用户。

您正在寻找的是 IdentityServer 上的 Authorization。要实现此功能,无需将 access_token 传递给 IDS4,只需为需要授权的 controller/action 添加 [Authorize] 属性。 快速入门

中的 ConsentController 就是一个很好的例子

客户端仅请求特定范围的访问令牌。这些范围是资源的一部分,确保访问令牌只能由特定受众使用。 IDP 忽略声明的原因是因为 IDP 不是资源的一部分。

如果您想使用 Api 个端点扩展 IDP,例如对于必须由客户端访问的管理员之类的功能,那么您可以像配置任何其他 api 一样配置它。如果允许客户端请求范围,则声明将成为访问令牌的一部分,作为观众,IDP 将看到声明。

但是对于 IDP 上的视图/页面,您可以简单地使用 cookie。在登录时,您可以将这些声明添加到本地 cookie。

在代码中,您可以像往常一样使用授权。您可以定义策略并使用过滤器和属性。


假设用户是 'Admin group' 的一部分,那么您可以在登录时将此角色添加到 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")]