簡體   English   中英

基於角色的基本身份驗證失敗

[英]Role-based basic authentication failing

我已經在我的 Web API 站點中實現了基本授權。

根據網上的一篇文章,我有以下class。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class BasicAuthorizationAttribute : AuthorizeAttribute
{
    public BasicAuthorizationAttribute()
    {
        Policy = "BasicAuthentication";
    }
}

然后在我的自定義AuthenticationHandler<>中,我以這種方式創建了AuthenticatedTicket

var authenticatedUser = new AuthenticatedUser("BasicAuthentication", true, "roundthecode");
var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(authenticatedUser));
var ticket = new AuthenticationTicket(claimsPrincipal, Scheme.Name);

但現在我不想以這種方式創建政策。 我想改為定義這樣的角色。

List<Claim> claims = new();
claims.Add(new Claim(ClaimTypes.Name, username));
claims.AddRange(login.GetRoles().Select(r => new Claim(ClaimTypes.Role, r)));
ClaimsIdentity claimsIdentity = new(claims);
ClaimsPrincipal claimsPrincipal = new(claimsIdentity);
var ticket = new AuthenticationTicket(claimsPrincipal, Scheme.Name);

但現在我的 Web API 返回 403(禁止)。

這是因為我的BasicAuthorizationAttribute class 設置了策略嗎?

我不再使用策略。 我想要指定角色的選項。 但是如果沒有指定角色,那么我希望它被接受,只要它通過了基本身份驗證。

例如,有兩個用戶登錄。第一個用戶具有角色“a”,第二個用戶沒有角色。 您可以修改您的代碼,以便為兩個用戶添加一個名為“loggedIn”的角色,無論他們是否有任何其他角色。 然后第一個用戶具有角色“a,loggedIn”,第二個用戶僅具有角色“loggedIn”。 現在至少使用“loggedIn”角色保護端點,即使它以前沒有受到保護。

暫無
暫無

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

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