【问题标题】:Asp.Net Core not receiving tokenAsp.Net Core 未收到令牌
【发布时间】:2020-06-20 22:17:09
【问题描述】:

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

【问题讨论】:

标签: c# asp.net-core identityserver4 identity


【解决方案1】:

客户端仅请求特定范围的访问令牌。这些范围是资源的一部分,确保访问令牌只能由某些受众使用。 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")]

【讨论】:

    【解决方案2】:

    您要查找的是 IdentityServer 上的 Authorization。为了不需要将 access_token 传递给 IDS4,只需为您需要授权的控制器/操作添加 [Authorize] 属性。 很好的例子是快速入门中的ConsentController

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2012-06-05
      • 2020-03-21
      • 2017-01-11
      • 1970-01-01
      相关资源
      最近更新 更多