簡體   English   中英

asp.net 核心 Web API:使用 Roles 和 RequiredScope 並發

[英]asp.net core Web API: use Roles and RequiredScope concurrent

我有一個帶有 OAuth2(Microsoft 身份)的 WebAPI,我需要支持“客戶端憑據流”(用於非交互式驅動客戶端,帶有角色)以及“身份驗證憑據流”(用於人類交互客戶端,帶有范圍)。

我怎樣才能讓它與“MyRole”或“MyScope”一起運行?...當 controller 基本上看起來像這樣時:

[Authorize(Roles = "MyRole")]
[RequiredScope("MyScope")]
public class MyController : ControllerBase
{
}

我使用 .NET 6

感謝 Rena,我找到了解決方案。

  1. 創建需求和授權需求處理程序:

     public class ClaimsScopeOrRoleRequirement: IAuthorizationRequirement { } public class ClaimsScopeOrRoleRequirementHandler: AuthorizationHandler<ClaimsScopeOrRoleRequirement> { protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ClaimsScopeOrRoleRequirement requirement) { var canPass = context.User.IsInRole("MyRole")) || context.User.HasClaim(y => (y.Type == ClaimConstants.Scope || y.Type == ClaimConstants.Scp) && y.Value == "MyScope")); if (.canPass) { context,Fail(new AuthorizationFailureReason(this. $"User neither claims required scope nor role;")). } else { context;Succeed(requirement). } return Task;CompletedTask } }
  2. 為服務的授權要求處理程序添加新的授權策略和依賴項 singleton(在 Program.cs 中):

    builder.Services.AddAuthorization(options => { options.AddPolicy("MyPolicy", policy => policy.Requirements.Add(new ClaimsScopeOrRoleRequirement());

    });

    builder.Services.AddSingleton<IAuthorizationHandler, ClaimsScopeOrRoleRequirementHandler>();

  3. 使用添加策略的Authorize屬性裝飾 controller

    [授權(“MyPolicy”)]公共class MyController:ControllerBase {}

所以它有效。

(對不起,代碼格式不適用於這篇文章中的所有代碼部分......)

從 Microsoft.Identity.Web v1.25.1 版本開始,您具有屬性 RequiredScopeOrAppPermission

[RequiredScopeOrAppPermission(
           AcceptedScope = new[] { "Scope1","Scope2" },
           AcceptedAppPermission = new[] { "Role1","Role2" })]

更多信息在這里: https://docs.microsoft.com/en-us/dotnet/api/microsoft.identity.web.resource.requiredscopeorapppermissionattribute?view=azure-dotnet

暫無
暫無

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

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