gpt4 book ai didi

c# - 访问/保护 Restful 服务 oAuth2

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:48 25 4
gpt4 key购买 nike

我正在尝试编写一个具有多个端点的 Restful 服务

假设每个端点调用都由一个角色保护。

  1. GetEmployees(角色/声明 = Employee.Readonly 或 Employee.Edit 或 Employee.Admin)
  2. AddEmployee(角色/声明 = Employee.Edit 或 Employee.Admin)
  3. UpdateEmployee(角色/声明 = Employee.Edit 或 Employee.Admin)
  4. 删除员工(角色/声明 = 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 端,您可以使用新的 Policy-based authorization .

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);
}
}

在您将拥有的 claim 中

    {
"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

}

关于c# - 访问/保护 Restful 服务 oAuth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com