přehled ověřování ASP.NET Core

O Jan Rousos

Ověřování je proces určování identity uživatele. Autorizace je proces, který určuje, jestli má uživatel přístup k prostředku. v ASP.NET Core se ověřování zpracovává pomocí IAuthenticationService , který používá middlewareověřování. Ověřovací služba používá zaregistrované obslužné rutiny ověřování k dokončení akcí souvisejících s ověřováním. Mezi příklady akcí souvisejících s ověřováním patří:

  • Ověřování uživatele.
  • Odpověď, když se neověřený uživatel pokusí o přístup k prostředku s omezeným přístupem.

Registrované obslužné rutiny ověřování a jejich možnosti konfigurace se nazývají "schémata".

Schémata ověřování jsou určena registrací služby ověřování v nástroji Startup.ConfigureServices :

  • Voláním metody rozšíření specifické pro schéma po volání services.AddAuthentication (například AddJwtBearer nebo například AddCookie ). Tyto metody rozšíření používají AuthenticationBuilder. AddScheme k registraci schémat s odpovídajícím nastavením.
  • Méně často zavoláním AuthenticationBuilder. AddScheme přímo.

Například následující kód zaregistruje ověřovací služby a obslužné rutiny pro cookie ověřovací schémata JWT Bearer:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => Configuration.Bind("CookieSettings", options));

AddAuthenticationParametr JwtBearerDefaults.AuthenticationScheme je název schématu, který se použije ve výchozím nastavení, když konkrétní schéma není požadováno.

Pokud se používá víc schémat, zásady autorizace (nebo autorizační atributy) můžou určit schéma ověřování (nebo schémata) , na kterých závisí, aby ověřili uživatele. V předchozím příkladu se cookie schéma ověřování dá použít tak, že určíte jeho název ( CookieAuthenticationDefaults.AuthenticationScheme ve výchozím nastavení, přestože se při volání dá zadat jiný název AddCookie ).

V některých případech AddAuthentication je volání automaticky provedeno jinými metodami rozšíření. Například při použití ASP.NET Core Identity , AddAuthentication se nazývá interně.

Middleware ověřování se přidávají Startup.Configure voláním UseAuthentication metody rozšíření v aplikaci IApplicationBuilder . Volání UseAuthentication registruje middleware, který používá dříve registrovaná schémata ověřování. Zavolejte UseAuthentication před jakýkoli middleware, který závisí na ověřených uživatelích. Při použití směrování koncového bodu musí volání metody UseAuthentication jít:

  • Po UseRouting , takže informace o trasách jsou k dispozici pro rozhodování o ověřování.
  • Před UseEndpoints přístupem k koncovým bodům, aby bylo možné uživatele ověřit.

Koncepty ověřování

Ověření zodpovídá za to, aby bylo ClaimsPrincipal možné zajistit autorizaci k rozhodování o oprávnění. Existuje několik přístupů ke schématům ověřování, pomocí kterých můžete vybrat, která obslužná rutina ověření zodpovídá za generování správné sady deklarací:

Neexistuje žádné automatické zjišťování schémat. Pokud není zadáno výchozí schéma, je nutné schéma zadat v atributu autorizovat, v opačném případě je vyvolána následující chyba:

InvalidOperationException: nebyl zadán žádný authenticationScheme a nebyl nalezen žádný DefaultAuthenticateScheme. Výchozí schémata lze nastavit buď pomocí AddAuthentication (String defaultScheme), nebo AddAuthentication (Action <AuthenticationOptions> configureOptions).

Schéma ověřování

Schéma ověřování může vybrat, která obslužná rutina ověření zodpovídá za generování správné sady deklarací. Další informace najdete v tématu autorizace pomocí konkrétního schématu.

Schéma ověřování je název, který odpovídá:

  • Obslužná rutina ověřování.
  • Možnosti pro konfiguraci této konkrétní instance obslužné rutiny.

Schémata jsou užitečná jako mechanismus pro odkazování na chování související obslužné rutiny při ověřování, výzvě a nezakazujících. Například zásady autorizace můžou použít názvy schémat k určení, které schéma ověřování (nebo schémat) by se mělo použít k ověření uživatele. Při konfiguraci ověřování je běžné určit výchozí schéma ověřování. Výchozí schéma se použije, pokud prostředek nepožaduje konkrétní schéma. Je také možné:

  • Zadejte různá výchozí schémata, která se mají použít pro akce ověřování, výzvy a zakazujení.
  • Kombinování několika schémat do jednoho pomocí schémat zásad.

Obslužná rutina ověřování

Obslužná rutina ověřování:

Obslužné rutiny ověřování na základě konfigurace schématu ověřování a kontextu příchozího požadavku:

  • Konstrukce AuthenticationTicket objektů představujících identitu uživatele, je-li ověření úspěšné.
  • Pokud je ověřování neúspěšné, vraťte se k žádnému výsledku nebo neúspěchu.
  • Mít metody pro výzvu a nezakazující akce, když se uživatelé pokusí o přístup k prostředkům:
    • Nemají oprávnění k přístupu (zakázat).
    • Pokud nejsou ověřeny (výzva).

RemoteAuthenticationHandler<TOptions> infrastruktura AuthenticationHandler<TOptions>

RemoteAuthenticationHandler<TOptions> je třída pro ověřování, které vyžaduje krok vzdáleného ověřování. Po dokončení kroku vzdáleného ověření volá obslužná rutina zpět do CallbackPath sady obslužnou rutinou. Obslužná rutina dokončí krok ověřování pomocí informací předaných HandleRemoteAuthenticateAsync cestě zpětného volání. Protokol OAuth 2,0 a OIDC používají tento model. Tokeny JWT a cookie s nejsou, protože mohou pouze přímo používat hlavičku nosiče a cookie k ověření. Vzdálený hostovaný poskytovatel v tomto případě:

  • Je poskytovatel ověřování.
  • Mezi příklady patří Facebook, Twitter, Google, Microsofta jakýkoli jiný poskytovatel OIDC, který zpracovává ověřování uživatelů pomocí mechanismu obslužných rutin.

Ověření

Akce ověření schématu ověřování zodpovídá za sestavení identity uživatele na základě kontextu požadavku. Vrátí hodnotu AuthenticateResult určující, zda bylo ověřování úspěšné, a pokud ano, identitu uživatele v ověřovacím lístku. Viz třída AuthenticateAsync. Mezi příklady ověřování patří:

  • cookieSchéma ověřování vytvářející identitu uživatele od cookie s.
  • Deserializace a ověření nosného tokenu JWT pro sestavení identity uživatele.

Úkol

Ověření je vyvoláno autorizací, když neověřený uživatel požádá o koncový bod, který vyžaduje ověření. Výzva k ověření se vydá, například když anonymní uživatel požádá o omezený prostředek nebo klikne na odkaz pro přihlášení. Autorizace vyvolá výzvu pomocí zadaných schémat ověřování nebo výchozí hodnota, pokud není zadána. Viz třída ChallengeAsync. Příklady výzev k ověřování zahrnují:

  • cookieSchéma ověřování přesměrovává uživatele na přihlašovací stránku.
  • Schéma nosiče JWT vracející 401 výsledek s www-authenticate: bearer hlavičkou.

Akce výzvy by měla dát uživateli informace o tom, jaký ověřovací mechanismus použít pro přístup k požadovanému prostředku.

Zalomen

Akce zakázat autorizačnímu schématu je volána v případě, že se ověřený uživatel pokusí o přístup k prostředku, ke kterému nemají přístup. Viz třída ForbidAsync. Mezi příklady ověřování, které patří:

  • cookieSchéma ověřování přesměrovává uživatele na stránku oznamující, že byl zakázán přístup.
  • Schéma nosiče JWT vracející výsledek 403.
  • Vlastní schéma ověřování přesměrované na stránku, kde může uživatel požádat o přístup k prostředku.

Akce zakázat může uživateli informovat:

  • Jsou ověřeny.
  • Nemají oprávnění k přístupu k požadovanému prostředku.

Rozdíly mezi výzvou a zakazují se zobrazují na následujících odkazech:

Zprostředkovatelé ověřování na tenanta

ASP.NET Core framework nemá integrované řešení pro více tenantů. I když je pro zákazníky určitě možné si ho napsat pomocí integrovaných funkcí, doporučujeme zákazníkům, aby se k tomuto účelu podívali na Řešení Core.

K jádru se přichytá:

  • Open source modulární a více tenantské architektury aplikací vytvořené pomocí ASP.NET Core.
  • Systém pro správu obsahu (CMS) postavený na této architekturě aplikací.

Příklad zprostředkovatelů ověřování na tenanta najdete ve zdroji Služby základního ověřování.

Další zdroje informací