如何在资源api中使用IdentityServer4范围

时间:2018-03-29 06:42:50

标签: c# identityserver4

我正在我的身份服务器应用程序中创建一个api资源:

new ApiResource
{
    Name = "socialnetwork",

    Scopes =
    {
        new Scope()
        {
            Name = "socialnetwork.read_contents",
            DisplayName = "Read"
        },
        new Scope
        {
            Name = "socialnetwork.share_content",
            DisplayName = "Write"
        }
    }
}

但是如何在我的socialnetwork api控制器中使用这个范围。

public class SocialController : Controller
{
   [HttpGet]
   public async Task<IActionResult> GetCotntents(){

   }

   [HttpPost]       
   public async Task<IActionResult> ShareCotntents(string content){

   }
}
  • 如果客户有socialnetwork.read_contents范围,则可以访问GetCotntents()方法。
  • 如果客户有socialnetwork.share_content范围,则可以访问ShareCotntents()方法。

实际上范围的目的是这个吗?我该如何使用它?

1 个答案:

答案 0 :(得分:1)

我认为你需要做的是为你想要使用的每个范围设置一个策略(在你的ConfigureServices中)

 services.AddAuthorization(x =>
            {
                x.AddPolicy("readcontents", policy => 
                  policy.RequireClaim("scope", "socialnetwork.read_contents"));
                x.AddPolicy("shared", policy => 
                 policy.RequireClaim("scope", "socialnetwork.share_content"));
            });

添加然后,您可以使用策略

在api方法上标记Authorize属性
   [HttpGet]
   [Authorize("readcontents")]
   public async Task<IActionResult> GetCotntents(){

   }

  [HttpPost]      
  [Authorize("shared")] 
  public async Task<IActionResult> ShareCotntents(string content){

  }