我已經向我的 API 添加了身份驗證,可以使用兩種不同的身份驗證方案進行身份驗證。根據 Auth 標頭的格式,我使用ForwardDefaultSelector.
services.AddAuthentication(opt =>
{
opt.DefaultScheme = "ForwardScheme";
opt.DefaultChallengeScheme = "ForwardScheme";
})
.AddPolicyScheme("ForwardScheme", "ForwardScheme", options =>
options.ForwardDefaultSelector = context =>
context.Request.IsSchemeA()
? "SchemeA"
: "SchemeB")
.AddSchemeA()
.AddSchemeB();
添加方案:
public static AuthenticationBuilder AddSchemeA(this AuthenticationBuilder builder)
{
builder.AddScheme<AuthenticationSchemeOptions, SchemeAHandler>(
"SchemeA", null);
return builder;
}
轉發似乎作業正常,我可以看到基于標頭值的請求到達正確的身份驗證處理程式。
問題是即使身份驗證失敗,API 呼叫也不會被阻止,我仍然會收到 200 回應。
在 AuthHandler 我只是回傳這個:
return AuthenticateResult.Fail("Authentication Failed");
知道我在這里缺少什么嗎?謝謝。
uj5u.com熱心網友回復:
如果為應用程式注冊身份驗證方案并將身份驗證中間件添加到 ASP.NET 核心請求管道,則基本上是在要求 ASP.NET 核心框架嘗試使用指定的身份驗證方案對任何傳入請求進行身份驗證。這本身不會將回應狀態代碼從 200 更改為 401。
為了讓您在匿名請求到達您的服務器時獲得 401 回應,您需要對authetication challenge傳入請求提出所謂的。
最簡單的方法基本上是要求對請求主體進行身份驗證,以便執行某個操作方法。為此,您只需使用 [Authorize] 屬性來裝飾操作方法。通過這種方式,您正在為您的操作方法設定執行策略,該策略僅在請求主體經過身份驗證時才允許方法執行。
uj5u.com熱心網友回復:
@EnricoMassone 感謝您為我指明了正確的方向。
我的控制器方法缺少[Authorize]屬性。
你可以在每個方法上單獨設定屬性,或者你可以做這樣的事情,它會為你的所有控制器啟用所有方法的授權
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/424366.html
