簡體   English   中英

訪問/保護Restful服務oAuth2

[英]Accessing/Securing Restful service oAuth2

我正在嘗試編寫一個Restful服務,它有多個端點,例如

假設每個端點調用均由角色保護。

  1. GetEmployees(角色/聲明= Employee.Readonly或Employee.Edit或Employee.Admin)
  2. AddEmployee(角色/聲明= Employee.Edit或Employee.Admin)
  3. UpdateEmployee(角色/聲明= Employee.Edit或Employee.Admin)
  4. DeleteEmployee(角色/索賠= Employee.Admin)

借助隱式流程,只需檢查角色聲明就可以了。
我對客戶憑證流感到困惑,如何在此處將作用域映射到角色?

假設您具有以下情況的“客戶端憑據”方法:

var client = new TokenClient(
            BaseAddress + "/connect/token",
            "clientId",
            "clientSecret");

var result = client.RequestClientCredentialsAsync(scope: "my.api").Result;

var accessToken = result.AccessToken;

var client = new HttpClient();
client.SetBearerToken(accessToken);
var result = client.GetStringAsync("https://protectedapiaddress/api/data/getdata").Result;

其中BaseAddress是您的IDS地址。

當然,您將必須使用適當的流程(客戶端憑據)在IDS客戶端列表中注冊您的客戶端,並且范圍是可選的,但是我想您將需要一個。

然后在API端,您可以使用新的基於策略的授權

API方法:

[HttpGet]
[Authorize(Policy = "AdminUser")]
[Route("getdata")]
public Data GetData()
{
  // some code here
}

以及授權要求:

public class AdminUserRequirement : AuthorizationHandler<AdminUserRequirement>, IAuthorizationRequirement
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AdminUserRequirement requirement)
    {
        if (!context.User.HasClaim(<'Your rule'>))
        {
            context.Fail();
        }
        else
        {
            context.Succeed(requirement);
        }
        return Task.FromResult(0);
    }
}

在索賠中,您將擁有

    {
       "scope" : "my.api"
       "clientId" : "clientId"
    }

和更多。 然后您可以應用規則。

編輯 :忘記提及-您必須在Startup.cs中注冊策略

public void ConfigureServices(IServiceCollection services)
{
    services
            .AddMvcCore()
            .AddAuthorization(options =>
            {
                    options.AddPolicy("AdminUser",
                    policy => policy.Requirements.Add(new AdminUserRequirement()));
            });

    // More code here

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM