为IdentityServer4添加一个API

问题描述 投票:0回答:1

我有一个API和客户端,我使用Identity Server的快速入门创建了它,并且它在工作。 在配置文件中,我有一个叫做api1的API,我把它设置为我创建的一个叫做Admin的用户的允许范围。 反过来,这允许我在API项目中调用名为IdentityController的控制器。 这将返回一些关于索赔的数据。 效果很好。 我添加了一个名为MsgController的新控制器,并授权,它可以被顺利调用。 然而我需要一些指导。

  1. 我想把api2的允许范围给一个新用户 然后只允许这个范围调用MsgController。
  2. 我如何防止允许的作用域 "api1 "在MsgController中使用,并防止 "api2"(我想创建的新作用域)在IdentityController中使用。

理想情况下,我需要创建一个有两个登录的测试,并显示他们不能基于他们的作用域访问另一个控制器。 我以为作用域的名称会与控制器的名称相关联,但情况似乎并非如此。 我想这是我对如何将作用域应用到api的理解不够。

谢谢,我有一个API和客户端,我想把它应用在API上。

.net .net-core identityserver4
1个回答
0
投票

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

在你的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.
}

更多细节请参考。参考文献1 参考文献2

© www.soinside.com 2019 - 2024. All rights reserved.