【问题标题】:Adding an API to IdentityServer4向 IdentityServer4 添加 API
【发布时间】:2020-05-08 01:41:20
【问题描述】:

我有一个使用 Identity Server 快速入门创建的 API 和客户端,它正在工作。在配置文件中,我有一个名为 api1 的 API,我已将其设置为我创建的名为 Admin 的用户的允许范围。反过来,这允许我调用名为 IdentityController 的 API 项目中的控制器。这将返回有关声明的一些数据。效果很好。我添加了一个名为 MsgController 的带有授权的新控制器,并且可以毫无问题地调用它。但是,我需要以下方面的指导:

  1. 我想为新用户提供 api2 的允许范围,然后只允许该范围调用 MsgController
  2. 如何防止允许的范围“api1”在 MsgController 中使用,并防止“api2”(我要创建的新范围)使用 IdentityController。

理想情况下,我需要创建一个包含两个登录名的测试,并根据他们的范围显示他们无法访问另一个控制器。我认为范围的名称与控制器的名称相关,但似乎并非如此。我认为这是我对如何将范围应用于 api 缺乏了解。

谢谢。

【问题讨论】:

  • 您可以启用基于角色的访问(这使用声明)或实施操作过滤器(在这里我们可以使用自定义逻辑和声明)

标签: .net .net-core identityserver4


【解决方案1】:

您只需要使用策略来限制控制器。

在您的 startup.cs ConfigureService() 添加以下扩展名

services.AddAuthorization(options =>
{
    //policy1
    options.AddPolicy("api1Policy", builder =>
    {
        builder.RequireClaim("scope", "api1");
    });

    //policy2
    options.AddPolicy("api2Policy", builder =>
    {
        builder.RequireClaim("scope", "api2");
    });
});

您可以使用更复杂的策略验证,builder.RequireAssertion();

在你的控制器中添加这样的注释。

[Authorize(Policy = "api2Policy")]
public class MsgController: Controller
{
   //Users with api2 scope will be allowed in here. Likewise, do the same for others.
}

更多详情请参考Reference1Reference2

【讨论】:

  • 谢谢。这就是我一直在寻找的。​​span>
猜你喜欢
  • 2017-07-26
  • 2018-12-24
  • 2019-08-22
  • 2018-12-04
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
相关资源
最近更新 更多