IdentityServer voor cloudeigen toepassingen
Fooi
Deze inhoud is een fragment uit het eBook, Cloud Native .NET Applications for Azure ontwerpen, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.
PDF- downloaden
IdentityServer is een verificatieserver die OpenID Connect -standaarden (OIDC) en OAuth 2.0 implementeert voor ASP.NET Core. Het is ontworpen om een algemene manier te bieden voor het verifiëren van aanvragen voor al uw toepassingen, ongeacht of het web-, systeemeigen, mobiele of API-eindpunten zijn. IdentityServer kan worden gebruikt om eenmalige aanmelding (Single Sign-On) te implementeren voor meerdere toepassingen en toepassingstypen. Het kan worden gebruikt om werkelijke gebruikers te verifiëren via aanmeldingsformulieren en vergelijkbare gebruikersinterfaces, evenals verificatie op basis van services die doorgaans betrekking hebben op tokenuitgifte, verificatie en verlenging zonder enige gebruikersinterface. IdentityServer is ontworpen als een aanpasbare oplossing. Elk exemplaar is doorgaans aangepast aan de behoeften van een afzonderlijke organisatie en/of set toepassingen.
Algemene scenario's voor web-apps
Normaal gesproken moeten toepassingen enkele of alle volgende scenario's ondersteunen:
- Menselijke gebruikers die toegang hebben tot webtoepassingen met een browser.
- Menselijke gebruikers krijgen toegang tot back-endweb-API's via browsergebaseerde apps.
- Menselijke gebruikers op mobiele/systeemeigen clients die toegang hebben tot back-end web-API's.
- Andere toepassingen die toegang hebben tot back-endweb-API's (zonder een actieve gebruiker of gebruikersinterface).
- Elke toepassing moet mogelijk communiceren met andere web-API's, met behulp van zijn eigen identiteit of delegeren aan de identiteit van de gebruiker.
Afbeelding 8-1. Toepassingstypen en -scenario's.
In elk van deze scenario's moet de beschikbaar gemaakte functionaliteit worden beveiligd tegen onbevoegd gebruik. Dit vereist ten minste verificatie van de gebruiker of principal die een aanvraag voor een resource indient. Deze verificatie kan gebruikmaken van een van de verschillende algemene protocollen, zoals SAML2p, WS-Fed of OpenID Connect. Communicatie met API's maakt doorgaans gebruik van het OAuth2-protocol en de ondersteuning voor beveiligingstokens. Het scheiden van deze kritieke beveiligingsproblemen en hun implementatiedetails van de toepassingen zelf zorgt voor consistentie en verbetert de beveiliging en onderhoudbaarheid. Het uitbesteden van deze zorgen aan een speciaal product zoals IdentityServer helpt de vereiste voor elke toepassing om deze problemen zelf op te lossen.
IdentityServer biedt middleware die wordt uitgevoerd binnen een ASP.NET Core-toepassing en voegt ondersteuning toe voor OpenID Connect en OAuth2 (zie ondersteunde specificaties). Organisaties zouden hun eigen ASP.NET Core-app maken met behulp van IdentityServer middleware om te fungeren als de STS voor al hun op tokens gebaseerde beveiligingsprotocollen. De IdentityServer-middleware biedt eindpunten ter ondersteuning van standaardfunctionaliteit, waaronder:
- Autoriseren (de eindgebruiker verifiëren)
- Token (een token programmatisch aanvragen)
- Detectie (metagegevens over de server)
- Gebruikersgegevens (gebruikersgegevens ophalen met een geldig toegangstoken)
- Apparaatautorisatie (gebruikt om apparaatstroomautorisatie te starten)
- Introspectie (tokenvalidatie)
- Intrekking (tokenintrekking)
- Sessie beëindigen (eenmalige afmelding activeren voor alle apps)
Aan de slag gaan
IdentityServer is beschikbaar:
- Met een communitylicentie waarmee u de IdentityServer gratis kunt gebruiken voor kleine bedrijven en non-profit (voorwaarden van toepassing)
- Betaald, waarmee u de IdentityServer-kunt gebruiken in een commercieel scenario
Zie voor meer informatie over prijzen de pagina met prijzen van het officiële product.
U kunt het toevoegen aan uw toepassingen met behulp van de NuGet-pakketten. Het hoofdpakket is IdentityServer, die meer dan vier miljoen keer is gedownload. Het basispakket bevat geen code van de gebruikersinterface en biedt alleen ondersteuning voor configuratie in het geheugen. Als u deze wilt gebruiken met een database, wilt u ook een gegevensprovider zoals Duende.IdentityServer.Storage, die Gebruikmaakt van Entity Framework Core voor het opslaan van configuratie- en operationele gegevens voor IdentityServer. Voor de gebruikersinterface kunt u bestanden kopiëren uit de Quickstart UI-opslagplaats in uw ASP.NET Core MVC-toepassing om ondersteuning toe te voegen voor aanmelden en afmelden met behulp van IdentityServer middleware.
Configuratie
IdentityServer ondersteunt verschillende soorten protocollen en providers voor sociale verificatie die kunnen worden geconfigureerd als onderdeel van elke aangepaste installatie. Dit wordt meestal gedaan in de Program
-klasse van de ASP.NET Core-toepassing (of in de Startup
-klasse in de ConfigureServices
-methode). De configuratie omvat het opgeven van de ondersteunde protocollen en de paden naar de servers en eindpunten die worden gebruikt. In afbeelding 8-2 ziet u een voorbeeldconfiguratie uit de quickstart IdentityServer voor ASP.NET Core-toepassingen project:
// some details omitted
builder.Services.AddIdentityServer();
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = "<insert here>";
options.ClientSecret = "<insert here>";
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://localhost:5001";
options.ClientId = "web";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.MapInboundClaims = false; // Don't rename claim types
options.SaveTokens = true;
});
}
afbeelding 8-2. IdentityServer configureren.
JavaScript-clients
Veel cloudtoepassingen maken gebruik van API's aan de serverzijde en uitgebreide clienttoepassingen met één pagina (SPA's) aan de front-end. IdentityServer verzendt een JavaScript-client (oidc-client.js
) via NPM die kan worden toegevoegd aan SPA's, zodat ze IdentityServer kunnen gebruiken voor aanmelding, afmelden en op tokens gebaseerde verificatie van web-API's. Daarnaast kunt u een back-end-for-front-end (BFF) gebruiken die alle interacties van het beveiligingsprotocol met de tokenserver en de OAuth 2.0 van de IETF voor Browser-Based toepassingen implementeert.
Verwijzingen
- documentatie voor IdentityServer
- toepassingstypen
- JavaScript OIDC-client