Toegang verlenen aan webtoepassingen die gebruikmaken van OpenID Connect en Azure Active Directory
Waarschuwing
Deze inhoud is voor het oudere Azure AD v1.0-eindpunt. Gebruik het Microsoft Identity Platform voor nieuwe projecten.
OpenID Connect is een eenvoudige identiteitslaag die is gebouwd op het OAuth 2.0-protocol. OAuth 2.0 definieert mechanismen voor het verkrijgen en gebruiken van toegangstokens voor toegang tot beveiligde resources, maar ze definiëren geen standaardmethoden om identiteitsgegevens te verstrekken. OpenID Connect implementeert verificatie als een extensie voor het OAuth 2.0-autorisatieproces. Het biedt informatie over de eindgebruiker in de vorm van een id_token
die de identiteit van de gebruiker verifieert en basisprofielgegevens over de gebruiker verstrekt.
OpenID Connect is onze aanbeveling als u een webtoepassing bouwt die wordt gehost op een server en toegankelijk is via een browser.
Uw toepassing registreren bij uw AD-tenant
U moet eerst uw toepassing registreren bij uw Azure Active Directory-tenant (Azure AD-tenant). Na registratie beschikt u over een toepassings-id voor uw toepassing en kan uw toepassing tokens ontvangen.
Meld u aan bij de Azure-portal.
Kies uw Azure Active Directory-tenant door in de rechterbovenhoek van deze pagina uw account te selecteren, gevolgd door de navigatie Directory schakelen te selecteren en vervolgens de juiste tenant te selecteren.
- Sla deze stap over als u maar één Azure AD-tenant in uw account hebt of als u al de juiste Azure AD-tenant hebt geselecteerd.
Zoek en selecteer in de Azure-portal de optie Azure Active Directory.
Selecteer in het linkermenu van de Azure Active Directory achtereenvolgens App-registraties en Nieuwe registratie.
Volg de aanwijzingen en maak een nieuwe toepassing. Voor deze zelfstudie maakt het niet uit of het een webtoepassing of een openbare clienttoepassing (mobiel & desktop) is, maar als u specifieke voorbeelden wilt voor webtoepassingen of openbare clienttoepassingen, raadpleegt u onze quickstarts.
- Naam is de naam van de toepassing en beschrijft de toepassing voor eindgebruikers.
- Selecteer onder Ondersteunde accounttypen de optie Accounts in een organisatieadreslijst en persoonlijke Microsoft-account.
- Geef de omleidings-URI op. Voor webtoepassingen is dit de basis-URL van uw toepassing, waar gebruikers zich kunnen aanmelden. Bijvoorbeeld
http://localhost:12345
. Voor een openbare client (mobiele & desktop) gebruikt Azure AD deze om tokenantwoorden te retourneren. Voer een specifieke waarde in voor uw toepassing. Bijvoorbeeldhttp://MyFirstAADApp
.
Nadat u de registratie hebt voltooid, wijst Azure AD aan uw toepassing een unieke client-id toe. Dit is de toepassings-id. U hebt deze waarde nodig in de volgende secties. Kopieer deze daarom vanaf de toepassingspagina.
Als u uw toepassing in de Azure Portal wilt vinden, selecteert u App-registraties en selecteert u vervolgens Alle toepassingen weergeven.
Verificatiestroom waarbij OpenID Connect wordt gebruikt
De meest eenvoudige aanmeldingsstroom bevat de volgende stappen. Elk van deze stappen wordt hieronder uitgebreid beschreven.
OpenID Connect-document met metagegevens
OpenID Connect beschrijft een metagegevensdocument dat de meeste informatie bevat die een app nodig heeft om aan te melden. Dit omvat informatie zoals de URL's die moeten worden gebruikt en de locatie van de openbare ondertekeningssleutels van de service. Het OpenID Connect-metagegevensdocument vindt u op:
https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration
De metagegevens zijn een eenvoudig JSON-document (JavaScript Object Notation). Zie het volgende fragment voor een voorbeeld. De inhoud van het fragment wordt volledig beschreven in de OpenID Connect-specificatie. Houd er rekening mee dat het opgeven van een tenant-id in plaats van common
voor {tenant} hierboven resulteert in tenantspecifieke URI's in het JSON-object dat wordt geretourneerd.
{
"authorization_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/authorize",
"token_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/token",
"token_endpoint_auth_methods_supported":
[
"client_secret_post",
"private_key_jwt",
"client_secret_basic"
],
"jwks_uri": "https://login.microsoftonline.com/common/discovery/keys"
"userinfo_endpoint":"https://login.microsoftonline.com/{tenant}/openid/userinfo",
...
}
Als uw app aangepaste ondertekeningssleutels heeft als gevolg van het gebruik van de functie voor claimtoewijzing, moet u een appid
-queryparameter met de app-id toevoegen om een jwks_uri
te krijgen die wijst naar de informatie over de ondertekeningssleutel van uw app. Bijvoorbeeld: https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration?appid=6731de76-14a6-49ae-97bc-6eba6914391e
bevat een jwks_uri
van https://login.microsoftonline.com/{tenant}/discovery/keys?appid=6731de76-14a6-49ae-97bc-6eba6914391e
.
De aanmeldingsaanvraag verzenden
Wanneer uw webtoepassing de gebruiker moet verifiëren, moet deze de gebruiker doorsturen naar het /authorize
-eindpunt. Deze aanvraag is vergelijkbaar met het eerste deel van de OAuth 2.0-autorisatiecodestroom, met enkele belangrijke verschillen:
- De aanvraag moet het bereik
openid
in descope
-parameter bevatten. - De
response_type
-parameter moetid_token
bevatten. - De aanvraag moet de
nonce
-parameter bevatten.
Een voorbeeldaanvraag ziet er dan als volgt uit:
// Line breaks for legibility only
GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=id_token
&redirect_uri=http%3A%2F%2Flocalhost%3a12345
&response_mode=form_post
&scope=openid
&state=12345
&nonce=7362CAEA-9CA5-4B43-9BA3-34D7C303EBA7
Parameter | Type | Description |
---|---|---|
tenant | vereist | De {tenant} waarde in het pad van de aanvraag kan worden gebruikt om te bepalen wie zich kan aanmelden bij de toepassing. De toegestane waarden zijn tenant-id's, bijvoorbeeld 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 of contoso.onmicrosoft.com common voor tenant-onafhankelijke tokens |
client_id | vereist | De toepassings-id die aan uw toepassing is toegewezen toen u deze bij Azure AD hebt geregistreerd. U vindt dit in de Azure Portal. Klik op Azure Active Directory, klik op App-registraties, kies de toepassing en zoek de toepassings-id op de toepassingspagina. |
response_type | vereist | Moet id_token bevatten voor aanmelding bij OpenID Connect. Het kan ook andere response_types bevatten, zoals code of token . |
scope | aanbevolen | De OpenID Connect-specificatie vereist het bereik openid , dat wordt omgezet in de machtiging 'Aanmelden' in de gebruikersinterface voor toestemming. Deze en andere OIDC-bereiken worden genegeerd op het v1.0-eindpunt, maar is wel een best practice voor clients die compatibel zijn met standaarden. |
nonce | vereist | Een waarde die is opgenomen in de aanvraag, gegenereerd door de app, die wordt opgenomen in de resulterende id_token als een claim. De app kan deze waarde vervolgens verifiëren om aanvallen waarbij tokens worden herhaald te beperken. De waarde is doorgaans een gerandomiseerde, unieke tekenreeks of GUID die kan worden gebruikt om de oorsprong van de aanvraag te identificeren. |
redirect_uri | aanbevolen | De omleidings-URI van uw app, waar verificatiereacties kunnen worden verzonden en ontvangen door uw app. Deze moet exact overeenkomen met een van de omleidings-URI's die u hebt geregistreerd in de portal, behalve dat deze URL-codering moet hebben. Als deze ontbreekt, wordt de gebruikersagent willekeurig teruggestuurd naar een van de omleidings-URI's die zijn geregistreerd voor de app. Maximale lengte is 255 bytes |
response_mode | optioneel | Hiermee geeft u de methode op die moet worden gebruikt om de resulterende authorization_code terug te sturen naar uw app. Ondersteunde waarden zijn form_post voor HTTP-formulierpost en fragment voor URL-fragment. Voor webtoepassingen raden we u aan response_mode=form_post te gebruiken om te zorgen voor de veiligste overdracht van tokens naar uw toepassing. De standaardinstelling voor elke stroom, inclusief een id_token is fragment . |
staat | aanbevolen | Een waarde die is opgenomen in de aanvraag die wordt geretourneerd in de tokenreactie. Het kan een tekenreeks zijn van alle gewenste inhoud. Een willekeurig gegenereerde unieke waarde wordt doorgaans gebruikt voor om aanvallen van aanvraagvervalsing op meerdere sites te voorkomen. De status wordt ook gebruikt voor het coderen van informatie over de status van de gebruiker in de app voordat de verificatieaanvraag is opgetreden, zoals de pagina of weergave waarop ze zich bevonden. |
vraag | optioneel | Geeft het type gebruikersinteractie aan dat vereist is. Momenteel zijn de enige geldige waarden 'aanmelden', 'geen' en 'toestemming'.
prompt=login dwingt de gebruiker om zijn referenties op die aanvraag in te voeren, waardoor eenmalige aanmelding wordt genegeerd.
prompt=none is het tegenovergestelde - het zorgt ervoor dat de gebruiker geen interactieve prompt te zien krijgt. Als de aanvraag niet stil op de achtergrond kan worden voltooid via eenmalige aanmelding, retourneert het eindpunt een fout.
prompt=consent activeert het dialoogvenster OAuth-toestemming nadat de gebruiker zich heeft aangemeld en vraagt de gebruiker machtigingen te verlenen aan de app. |
login_hint | optioneel | Kan worden gebruikt om het veld gebruikersnaam/e-mailadres van de aanmeldingspagina voor de gebruiker vooraf in te vullen, als u de gebruikersnaam vooraf weet. Apps gebruiken deze parameter vaak tijdens het opnieuw verifiëren, waarbij de gebruikersnaam al is geëxtraheerd uit een eerdere aanmelding met behulp van de preferred_username -claim. |
Op dit moment wordt de gebruiker gevraagd om zijn referenties in te voeren en de verificatie te voltooien.
Voorbeeldantwoord
Een voorbeeldantwoord dat is verzonden naar de redirect_uri
opgegeven aanmeldingsaanvraag nadat de gebruiker is geverifieerd, kan er als volgt uitzien:
POST / HTTP/1.1
Host: localhost:12345
Content-Type: application/x-www-form-urlencoded
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNB...&state=12345
Parameter | Beschrijving |
---|---|
id_token | De id_token -app die door de app is aangevraagd. U kunt de id_token gebruiken om de identiteit van de gebruiker te controleren en een sessie met de gebruiker te starten. |
staat | Een waarde die is opgenomen in de aanvraag die ook wordt geretourneerd in de tokenreactie. Een willekeurig gegenereerde unieke waarde wordt doorgaans gebruikt voor om aanvallen van aanvraagvervalsing op meerdere sites te voorkomen. De status wordt ook gebruikt voor het coderen van informatie over de status van de gebruiker in de app voordat de verificatieaanvraag is opgetreden, zoals de pagina of weergave waarop ze zich bevonden. |
Foutreactie
Foutreacties kunnen ook naar de redirect_uri
worden verzonden, zodat de app ze op de juiste wijze kan verwerken:
POST / HTTP/1.1
Host: localhost:12345
Content-Type: application/x-www-form-urlencoded
error=access_denied&error_description=the+user+canceled+the+authentication
Parameter | Beschrijving |
---|---|
fout | Een foutcodereeks die kan worden gebruikt voor het classificeren van typen fouten die optreden en die kan worden gebruikt om op fouten te reageren. |
error_description | Een specifiek foutbericht waarmee een ontwikkelaar de hoofdoorzaak van een verificatiefout kan identificeren. |
Foutcodes voor autorisatie-eindpuntfouten
In de volgende tabel worden de verschillende foutcodes beschreven die kunnen worden geretourneerd in de error
-parameter van het foutbericht.
Foutcode | Description | Clientactie |
---|---|---|
invalid_request | Protocolfout, zoals een ontbrekende, vereiste parameter. | Herstel de aanvraag en dien ze opnieuw in. Dit is een ontwikkelingsfout en wordt meestal opgevangen tijdens de eerste test. |
unauthorized_client | De clienttoepassing mag geen autorisatiecode aanvragen. | Dit gebeurt meestal wanneer de clienttoepassing niet is geregistreerd in Azure AD of niet wordt toegevoegd aan de Azure AD-tenant van de gebruiker. De toepassing kan de gebruiker vragen om instructies voor het installeren van de toepassing en deze toe te voegen aan Azure AD. |
access_denied | Toestemming door resource-eigenaar geweigerd | De clienttoepassing kan de gebruiker waarschuwen dat het niet kan worden voortgezet, tenzij de gebruiker toestemming geeft. |
unsupported_response_type | De autorisatieserver biedt geen ondersteuning voor het reactietype in de aanvraag. | Herstel de aanvraag en dien ze opnieuw in. Dit is een ontwikkelingsfout en wordt meestal opgevangen tijdens de eerste test. |
server_error | Er is een onverwachte fout opgetreden op de server. | Probeer de aanvraag opnieuw. Deze fouten kunnen worden veroorzaakt door tijdelijke voorwaarden. De clienttoepassing kan de gebruiker uitleggen dat de reactie is vertraagd vanwege een tijdelijke fout. |
temporarily_unavailable | De server is tijdelijk te druk om de aanvraag te verwerken. | Probeer de aanvraag opnieuw. De clienttoepassing kan de gebruiker uitleggen dat de reactie is vertraagd vanwege een tijdelijke voorwaarde. |
invalid_resource | De doelresource is ongeldig omdat deze niet bestaat, Azure AD deze niet kan vinden of deze niet juist is geconfigureerd. | Dit geeft aan dat de resource, als deze bestaat, niet is geconfigureerd in de tenant. De toepassing kan de gebruiker vragen om instructies voor het installeren van de toepassing en deze toe te voegen aan Azure AD. |
De id_token valideren
Het ontvangen van een id_token
is niet voldoende om de gebruiker te verifiëren. U moet de handtekening valideren en de claims controleren in de id_token
volgens de vereisten van uw app. Het Azure AD-eindpunt maakt gebruik van JSON Web Tokens (JWT's) en openbare-sleutelcryptografie om tokens te ondertekenen en te controleren of deze geldig zijn.
U kunt ervoor kiezen om de id_token
-clientcode te valideren, maar het is gebruikelijk om de id_token
naar een back-endserver te verzenden en daar de validatie uit te voeren.
Mogelijk wilt u ook aanvullende claims valideren, afhankelijk van uw scenario. Enkele vaak voorkomende validaties omvatten:
- Ervoor zorgen dat de gebruiker/organisatie zich heeft geregistreerd voor de app.
- Ervoor zorgen dat de gebruiker over de juiste autorisatie/bevoegdheden beschikt met behulp van de
wids
- ofroles
-claims. - Ervoor zorgen dat er een bepaalde verificatiesterkte is opgetreden, zoals meervoudige verificatie.
Zodra u de id_token
hebt gevalideerd, kunt u een sessie met de gebruiker starten en de claims in de id_token
gebruiken om informatie over de gebruiker in uw app te verkrijgen. Deze informatie kan worden gebruikt voor weergave, records, persoonlijke instellingen, enzovoort. Voor meer informatie over id_tokens
en claims leest u AAD id_tokens.
Een afmeldingsaanvraag verzenden
Wanneer u de gebruiker wilt afmelden bij de app, is het niet voldoende om de cookies van uw app te wissen of anders de sessie met de gebruiker te beëindigen. U moet de gebruiker ook omleiden naar de end_session_endpoint
voor afmelden. Als u dit niet doet, kan de gebruiker opnieuw verifiëren bij uw app zonder de referenties opnieuw in te voeren, omdat de gebruiker een geldige sessie voor eenmalige aanmelding heeft met het Azure AD-eindpunt.
U kunt de gebruiker gewoon omleiden naar de end_session_endpoint
die staat vermeld in het OpenID Connect-metagegevensdocument:
GET https://login.microsoftonline.com/common/oauth2/logout?
post_logout_redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
Parameter | Type | Description |
---|---|---|
post_logout_redirect_uri | aanbevolen | De URL waarnaar de gebruiker moet worden omgeleid na het afmelden. Deze URL moet overeenkomen met een van de omleidings-URI's die zijn geregistreerd voor uw toepassing in de portal voor app-registratie. Als post_logout_redirect_uri niet is opgenomen, krijgt de gebruiker een algemeen bericht te zien. |
Eenmalige afmelding
Wanneer u de gebruiker omleidt naar de end_session_endpoint
, wist Azure AD de sessie van de gebruiker uit de browser. De gebruiker kan echter nog steeds zijn aangemeld bij andere toepassingen die Azure AD gebruiken voor verificatie. Als u wilt dat deze toepassingen de gebruiker tegelijkertijd afmelden, stuurt Azure AD een HTTP GET-aanvraag naar de geregistreerde LogoutUrl
van alle toepassingen waarmee de gebruiker momenteel is aangemeld. Toepassingen moeten reageren op deze aanvraag door een sessie te wissen die de gebruiker identificeert en een 200
-reactie retourneert. Als u eenmalige afmelding in uw toepassing wilt ondersteunen, moet u een dergelijke LogoutUrl
implementeren in de code van uw toepassing. U kunt de LogoutUrl
instellen vanuit de Azure Portal:
- Meld u aan bij de Azure-portal.
- Selecteer uw Active Directory door rechtsboven op de pagina op uw account te klikken.
- Kies Azure Active Directory in het linkernavigatievenster en kies vervolgens App-registraties en selecteer uw toepassing.
- Klik op Instellingen en vervolgens op Eigenschappen en zoek het tekstvak Afmeldings-URL.
Token ophalen
Veel web-apps moeten niet alleen de gebruiker aanmelden, maar ook toegang krijgen tot een webservice namens die gebruiker met behulp van OAuth. In dit scenario wordt OpenID Connect voor gebruikersverificatie gecombineerd terwijl tegelijkertijd een authorization_code
wordt verkregen die kan worden gebruikt om de access_tokens
op te halen met behulp van de OAuth-autorisatiecodestroom.
Toegangstokens ophalen
Als u toegangstokens wilt verkrijgen, moet u de aanmeldingsaanvraag van hierboven wijzigen:
// Line breaks for legibility only
GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e // Your registered Application ID
&response_type=id_token+code
&redirect_uri=http%3A%2F%2Flocalhost%3a12345 // Your registered Redirect Uri, url encoded
&response_mode=form_post // `form_post' or 'fragment'
&scope=openid
&resource=https%3A%2F%2Fservice.contoso.com%2F // The identifier of the protected resource (web API) that your application needs access to
&state=12345 // Any value, provided by your app
&nonce=678910 // Any value, provided by your app
Door het opnemen van machtigingsbereiken in de aanvraag en response_type=code+id_token
te gebruiken, zorgt het authorize
-eindpunt ervoor dat de gebruiker toestemming heeft gegeven voor de machtigingen die zijn aangegeven in de scope
-queryparameter en retourneert uw app een autorisatiecode om een toegangstoken in te wisselen.
Geslaagde reactie
Een geslaagde reactie, verzonden naar de redirect_uri
met behulp van response_mode=form_post
, ziet er als volgt uit:
POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNB...&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&state=12345
Parameter | Beschrijving |
---|---|
id_token | De id_token -app die door de app is aangevraagd. U kunt de id_token gebruiken om de identiteit van de gebruiker te controleren en een sessie met de gebruiker te starten. |
code | De autorisatiecode die door de app is aangevraagd. De app kan de autorisatiecode gebruiken om een toegangstoken aan te vragen voor de doelresource. Autorisatiecodes zijn kortstondige codes en verlopen normaal gesproken na ongeveer 10 minuten. |
staat | Als een statusparameter is opgenomen in de aanvraag, wordt dezelfde waarde weergegeven in de reactie. De app moet controleren of de statuswaarden in de aanvraag en het antwoord identiek zijn. |
Foutreactie
Foutreacties kunnen ook naar de redirect_uri
worden verzonden, zodat de app ze op de juiste wijze kan verwerken:
POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
error=access_denied&error_description=the+user+canceled+the+authentication
Parameter | Beschrijving |
---|---|
fout | Een foutcodereeks die kan worden gebruikt voor het classificeren van typen fouten die optreden en die kan worden gebruikt om op fouten te reageren. |
error_description | Een specifiek foutbericht waarmee een ontwikkelaar de hoofdoorzaak van een verificatiefout kan identificeren. |
Zie Foutcodes voor autorisatie-eindpuntfouten voor een beschrijving van de mogelijke foutcodes en de aanbevolen clientactie.
Zodra u een autorisatie code
en een id_token
hebt gekregen, kunt u de gebruiker aanmelden en namens de gebruiker toegangstokens ophalen. Als u de gebruiker wilt aanmelden, moet u de id_token
exact zoals hierboven beschreven valideren. Als u toegangstokens wilt ophalen, volgt u de stappen die worden beschreven in de sectie 'De autorisatiecode gebruiken om een toegangstoken aan te vragen' van onze OAuth-codestroomdocumentatie.
Volgende stappen
- Meer informatie over toegangstokens.
- Lees meer over de
id_token
en claims.