簡體   English   中英

ASP.NET Core中的多種身份驗證方案

[英]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;
}

// ...

AuthenticateResultAuthorizationResult表示成功與否通過Succeeded -它也提供了有關為何通過授權失敗的信息Failure

暫無
暫無

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

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