[英]Multiple authentication schemes in ASP.NET Core
回到ASP.NET Core 1中,身份驗證將手動掛接到其配置的請求管道中:對於自定義身份驗證過程,您只需定義一個AuthenticationMiddleware
並將其掛接到您應該進行身份驗證的管道中即可。
在ASP.NET Core 2中,沒有更多的AuthenticationMiddleware
,您應該在必須進行所有身份驗證的管道中的某個時刻執行UseAuthentication()
。
區別記錄在這里: https : //docs.microsoft.com/zh-cn/aspnet/core/security/authorization/limitingidentitybyscheme
為了區分不同的身份驗證方式,有一些由魔術字符串(ASP.NET Core中的許多魔術字符串)標識的策略。
然后,我被告知可以在控制器上選擇具有屬性的所需方案,但是在上述情況下我根本不使用MVC。 因此,如何指定管道的特定分支:
app.UseWhen(c => ..., app2 =>
{
// auth number 1 desired
...
});
app.UseWhen(c => ..., app2 =>
{
// auth number 2 desired
...
});
甚至在MVC中,身份驗證也發生在路由之前,那么在管道中的UseAuthentication()
點如何使用可能使用的方案的信息呢?
您可以通過調用AuthenticateAsync
使用命令式方法來指定特定的身份驗證方案。 這是一個例子:
app2.Use(async (ctx, next) =>
{
var authenticateResult = await ctx.AuthenticateAsync("SchemeName");
if (!authenticateResult.Succeeded)
{
ctx.Response.StatusCode = 401; // e.g.
return;
}
// ...
});
AuthenticateAsync
將authentication-scheme作為參數,並返回AuthenticateResult
的實例,該實例通過Succeeded
指示成功或失敗,並通過Principal
提供經過身份驗證的ClaimsPrincipal
。
您還可以使用IAuthorizationService
針對特定策略執行授權。 這里有一個如何的一個例子Principal
來自AuthenticateResult
可以通過傳遞AuthorizeAsync
:
var authorizationService = ctx.RequestServices.GetService<IAuthorizationService>();
var authorizationResult = await authorizationService.AuthorizeAsync(
authenticateResult.Principal, "PolicyName");
if (!authorizationResult.Succeeded)
{
ctx.Response.StatusCode = 403; // e.g.
return;
}
// ...
與AuthenticateResult
, AuthorizationResult
表示成功與否通過Succeeded
-它也提供了有關為何通過授權失敗的信息Failure
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.