Micro soft Identity platform en OpenID Connect Connect protocolMicrosoft identity platform and OpenID Connect protocol

OpenID Connect Connect (OIDC) is een verificatie protocol dat is gebaseerd op OAuth 2,0, dat u kunt gebruiken om een gebruiker veilig aan te melden bij een toepassing.OpenID Connect (OIDC) is an authentication protocol built on OAuth 2.0 that you can use to securely sign in a user to an application. Wanneer u de implementatie van OpenID Connect Connect van het micro soft Identity platform gebruikt, kunt u aanmelden en API-toegang tot uw apps toevoegen.When you use the Microsoft identity platform endpoint's implementation of OpenID Connect, you can add sign-in and API access to your apps. In dit artikel wordt uitgelegd hoe u dit onafhankelijk van taal kunt doen en wordt beschreven hoe u HTTP-berichten verzendt en ontvangt zonder enige micro soft open source-bibliothekente gebruiken.This article shows how to do this independent of language and describes how to send and receive HTTP messages without using any Microsoft open-source libraries.

OpenID Connect Connect breidt het OAuth 2,0- autorisatie protocol uit voor gebruik als een verificatie protocol, zodat u eenmalige aanmelding kunt uitvoeren met behulp van OAuth.OpenID Connect extends the OAuth 2.0 authorization protocol for use as an authentication protocol, so that you can do single sign-on using OAuth. OpenID Connect Connect introduceert het concept van een id-token. Dit is een beveiligings token waarmee de client de identiteit van de gebruiker kan verifiëren.OpenID Connect introduces the concept of an ID token, which is a security token that allows the client to verify the identity of the user. Het ID-token krijgt ook basis profiel informatie over de gebruiker.The ID token also gets basic profile information about the user. Ook wordt het User info-eind puntgeïntroduceerd, een API die informatie over de gebruiker retourneert.It also introduces the UserInfo endpoint, an API that returns information about the user.

Protocol diagram: aanmeldenProtocol diagram: Sign-in

De meest eenvoudige aanmeldings stroom bevat de stappen die in het volgende diagram worden weer gegeven.The most basic sign-in flow has the steps shown in the next diagram. Elke stap wordt gedetailleerd beschreven in dit artikel.Each step is described in detail in this article.

OpenID Connect Connect Protocol: aanmelden

Het OpenID Connect Connect meta data-document ophalenFetch the OpenID Connect metadata document

OpenID Connect Connect beschrijft een meta gegevens document (RFC) dat de meeste informatie bevat die vereist is voor een app om u aan te melden.OpenID Connect describes a metadata document (RFC) that contains most of the information required for an app to do sign in. Dit omvat informatie zoals de Url's die moeten worden gebruikt en de locatie van de open bare handtekeningen sleutels van de service.This includes information such as the URLs to use and the location of the service's public signing keys. U kunt dit document vinden door het pad naar het detectie document toe te voegen aan de URL van de instantie:You can find this document by appending the discovery document path to the authority URL:

Pad detectie document:/.well-known/openid-configurationDiscovery document path: /.well-known/openid-configuration

Providerhttps://login.microsoftonline.com/{tenant}/v2.0Authority: https://login.microsoftonline.com/{tenant}/v2.0

De {tenant} kan een van de volgende vier waarden hebben:The {tenant} can take one of four values:

WaardeValue BeschrijvingDescription
common Gebruikers met een persoonlijk Microsoft-account en een werk-of school account van Azure AD kunnen zich aanmelden bij de toepassing.Users with both a personal Microsoft account and a work or school account from Azure AD can sign in to the application.
organizations Alleen gebruikers met werk-of school accounts van Azure AD kunnen zich aanmelden bij de toepassing.Only users with work or school accounts from Azure AD can sign in to the application.
consumers Alleen gebruikers met een persoonlijke Microsoft-account kunnen zich aanmelden bij de toepassing.Only users with a personal Microsoft account can sign in to the application.
8eaef023-2b34-4da1-9baa-8bc8c9d6a490 of contoso.onmicrosoft.com8eaef023-2b34-4da1-9baa-8bc8c9d6a490 or contoso.onmicrosoft.com Alleen gebruikers van een specifieke Azure AD-Tenant (ongeacht of ze lid zijn van de directory met een werk-of school account, of gasten in de directory met een persoonlijk Microsoft-account) kunnen zich aanmelden bij de toepassing.Only users from a specific Azure AD tenant (whether they are members in the directory with a work or school account, or they are guests in the directory with a personal Microsoft account) can sign in to the application. De beschrijvende domein naam van de Azure AD-Tenant of de GUID-id van de Tenant kan worden gebruikt.Either the friendly domain name of the Azure AD tenant or the tenant's GUID identifier can be used. U kunt ook de Tenant van de gebruiker gebruiken, 9188040d-6c67-4c5b-b112-36a304b66dad in plaats van de consumers Tenant.You can also use the consumer tenant, 9188040d-6c67-4c5b-b112-36a304b66dad, in place of the consumers tenant.

De autoriteit wijkt af van de nationale Clouds, bijvoorbeeld https://login.microsoftonline.de voor het Azure AD Duitsland-exemplaar.The authority differs across national clouds - e.g. https://login.microsoftonline.de for the Azure AD Germany instance. Als u de open bare Cloud niet gebruikt, raadpleegt u de nationale eind punten van de cloud om de juiste voor u te vinden.If you do not use the public cloud, please review the national cloud endpoints to find the appropriate one for you. Zorg ervoor dat de Tenant en /v2.0/ aanwezig zijn in uw aanvraag, zodat u de v 2.0-versie van het eind punt kunt gebruiken.Ensure that the tenant and /v2.0/ are present in your request so you can use the v2.0 version of the endpoint.

Tip

Probeer het nu!Try it! Klik https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration om de configuratie weer te geven common .Click https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration to see the common configuration.

Voorbeeld aanvraagSample request

Als u het user info-eind punt voor de algemene instantie op de open bare Cloud wilt aanroepen, gebruikt u het volgende:To call the userinfo endpoint for the common authority on the public cloud, use the following:

GET /common/v2.0/.well-known/openid-configuration
Host: login.microsoftonline.com

VoorbeeldantwoordSample response

De meta gegevens zijn een eenvoudig JavaScript Object Notation (JSON)-document.The metadata is a simple JavaScript Object Notation (JSON) document. Raadpleeg het volgende fragment voor een voor beeld.See the following snippet for an example. De inhoud wordt volledig beschreven in de OpenID Connect Connect-specificatie.The contents are fully described in the OpenID Connect specification.

{
  "authorization_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize",
  "token_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token",
  "token_endpoint_auth_methods_supported": [
    "client_secret_post",
    "private_key_jwt"
  ],
  "jwks_uri": "https://login.microsoftonline.com/{tenant}/discovery/v2.0/keys",
  "userinfo_endpoint": "https://graph.microsoft.com/oidc/userinfo",
  "subject_types_supported": [
      "pairwise"
  ],
  ...

}

Als uw app aangepaste handtekening sleutels heeft als gevolg van het gebruik van de functie voor het toewijzen van claims , moet u een appid query parameter met de app-id toevoegen om een jwks_uri verwijzing naar de handtekening sleutel gegevens van uw app te krijgen.If your app has custom signing keys as a result of using the claims-mapping feature, you must append an appid query parameter containing the app ID in order to get a jwks_uri pointing to your app's signing key information. Bijvoorbeeld: https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration?appid=6731de76-14a6-49ae-97bc-6eba6914391e bevat een jwks_uri van https://login.microsoftonline.com/{tenant}/discovery/v2.0/keys?appid=6731de76-14a6-49ae-97bc-6eba6914391e .For example: https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration?appid=6731de76-14a6-49ae-97bc-6eba6914391e contains a jwks_uri of https://login.microsoftonline.com/{tenant}/discovery/v2.0/keys?appid=6731de76-14a6-49ae-97bc-6eba6914391e.

Normaal gesp roken gebruikt u dit meta gegevens document voor het configureren van een OpenID Connect Connect-bibliotheek of-SDK. de-bibliotheek gebruikt de meta gegevens om het werk uit te voeren.Typically, you would use this metadata document to configure an OpenID Connect library or SDK; the library would use the metadata to do its work. Als u echter geen vooraf gemaakte OpenID Connect Connect-bibliotheek gebruikt, kunt u de stappen in de rest van dit artikel volgen om u aan te melden in een web-app met behulp van het micro soft Identity platform-eind punt.However, if you're not using a pre-built OpenID Connect library, you can follow the steps in the remainder of this article to do sign-in in a web app by using the Microsoft identity platform endpoint.

De aanmeldings aanvraag verzendenSend the sign-in request

Als uw web-app de gebruiker moet verifiëren, kan deze de gebruiker naar het /authorize eind punt sturen.When your web app needs to authenticate the user, it can direct the user to the /authorize endpoint. Deze aanvraag is vergelijkbaar met de eerste poot van de OAuth 2,0-autorisatie code stroom, met de volgende belang rijke verschillen:This request is similar to the first leg of the OAuth 2.0 authorization code flow, with these important distinctions:

  • De aanvraag moet het openid bereik in de scope para meter bevatten.The request must include the openid scope in the scope parameter.
  • De response_type para meter moet bevatten id_token .The response_type parameter must include id_token.
  • De aanvraag moet de nonce para meter bevatten.The request must include the nonce parameter.

Belangrijk

Als u een ID-token wilt aanvragen vanuit het/Authorization-eind punt, moet de app-registratie in de registratie Portal de impliciete toekenning van id_tokens ingeschakeld hebben op het tabblad verificatie (waarmee de oauth2AllowIdTokenImplicitFlow vlag in het toepassings manifest wordt ingesteld op true ).In order to successfully request an ID token from the /authorization endpoint, the app registration in the registration portal must have the implicit grant of id_tokens enabled in the Authentication tab (which sets the oauth2AllowIdTokenImplicitFlow flag in the application manifest to true). Als deze niet is ingeschakeld, unsupported_response wordt een fout geretourneerd: de opgegeven waarde voor de invoer parameter response_type is niet toegestaan voor deze client.If it isn't enabled, an unsupported_response error will be returned: "The provided value for the input parameter 'response_type' isn't allowed for this client. De verwachte waarde is ' code 'Expected value is 'code'"

Bijvoorbeeld:For example:

// Line breaks are for legibility only.

GET https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=id_token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=form_post
&scope=openid
&state=12345
&nonce=678910
ParameterParameter VoorwaardeCondition DescriptionDescription
tenant VereistRequired U kunt de {tenant} waarde in het pad van de aanvraag gebruiken om te bepalen wie zich kan aanmelden bij de toepassing.You can use the {tenant} value in the path of the request to control who can sign in to the application. De toegestane waarden zijn common , organizations , consumers en Tenant-id's.The allowed values are common, organizations, consumers, and tenant identifiers. Zie basis beginselen van protocollenvoor meer informatie.For more information, see protocol basics.
client_id VereistRequired De client-id van de toepassing die de Azure Portal – app-registraties ervaring die aan uw app is toegewezen.The Application (client) ID that the Azure portal – App registrations experience assigned to your app.
response_type VereistRequired Moet zijn inbegrepen id_token voor OpenID Connect Connect-aanmelding.Must include id_token for OpenID Connect sign-in. Het kan ook andere response_type waarden bevatten, zoals code .It might also include other response_type values, such as code.
redirect_uri AanbevolenRecommended De omleidings-URI van uw app, waar verificatie reacties kunnen worden verzonden en ontvangen door uw app.The redirect URI of your app, where authentication responses can be sent and received by your app. De waarde moet exact overeenkomen met een van de omleidings-Uri's die u in de portal hebt geregistreerd, behalve dat deze URL moet worden gecodeerd.It must exactly match one of the redirect URIs you registered in the portal, except that it must be URL encoded. Als deze niet aanwezig is, kiest het eind punt één geregistreerde redirect_uri wille keurig om de gebruiker terug naar te sturen.If not present, the endpoint will pick one registered redirect_uri at random to send the user back to.
scope VereistRequired Een lijst met door spaties gescheiden bereiken.A space-separated list of scopes. Voor OpenID Connect Connect moet het bereik zijn opgenomen openid , dat wordt omgezet in de machtiging ' Meld u aan ' in de gebruikers interface van de toestemming.For OpenID Connect, it must include the scope openid, which translates to the "Sign you in" permission in the consent UI. U kunt ook andere bereiken in deze aanvraag toevoegen om toestemming te vragen.You might also include other scopes in this request for requesting consent.
nonce VereistRequired Een waarde die is opgenomen in de aanvraag, gegenereerd door de app, die wordt opgenomen in de resulterende id_token waarde als een claim.A value included in the request, generated by the app, that will be included in the resulting id_token value as a claim. De app kan deze waarde verifiëren om token replay-aanvallen te verhelpen.The app can verify this value to mitigate token replay attacks. De waarde is doorgaans een wille keurige, unieke teken reeks die kan worden gebruikt om de oorsprong van de aanvraag te identificeren.The value typically is a randomized, unique string that can be used to identify the origin of the request.
response_mode AanbevolenRecommended Hiermee geeft u de methode op die moet worden gebruikt om de resulterende autorisatie code terug te sturen naar uw app.Specifies the method that should be used to send the resulting authorization code back to your app. Deze waarde kan form_post of fragment zijn.Can be form_post or fragment. Voor webtoepassingen raden wij u response_mode=form_post aan om te zorgen voor de veiligste overdracht van tokens naar uw toepassing.For web applications, we recommend using response_mode=form_post, to ensure the most secure transfer of tokens to your application.
state AanbevolenRecommended Een waarde die in de aanvraag is opgenomen en die ook wordt geretourneerd in het token antwoord.A value included in the request that also will be returned in the token response. Dit kan een teken reeks zijn van elke gewenste inhoud.It can be a string of any content you want. Een wille keurig gegenereerde unieke waarde wordt doorgaans gebruikt om vervalsing van aanvragen op meerdere sites te voor komen.A randomly generated unique value typically is used to prevent cross-site request forgery attacks. De status wordt ook gebruikt om informatie over de status van de gebruiker in de app te coderen voordat de verificatie aanvraag is uitgevoerd, zoals de pagina of weer gave waarin de gebruiker zich bevond.The state also is used to encode information about the user's state in the app before the authentication request occurred, such as the page or view the user was on.
prompt OptioneelOptional Hiermee wordt het type gebruikers interactie aangegeven dat vereist is.Indicates the type of user interaction that is required. De enige geldige waarden op dit moment zijn login , none , en consent .The only valid values at this time are login, none, and consent. De prompt=login claim dwingt de gebruiker om hun referenties in te voeren voor die aanvraag, waardoor eenmalige aanmelding wordt genegeerd.The prompt=login claim forces the user to enter their credentials on that request, which negates single sign-on. De prompt=none claim is het tegenovergestelde.The prompt=none claim is the opposite. Met deze claim zorgt u ervoor dat de gebruiker niet wordt aangeboden met een interactieve prompt op.This claim ensures that the user isn't presented with any interactive prompt at. Als de aanvraag niet op de achtergrond kan worden voltooid via eenmalige aanmelding, wordt een fout geretourneerd door het micro soft Identity platform-eind punt.If the request can't be completed silently via single sign-on, the Microsoft identity platform endpoint returns an error. prompt=consentMet de claim wordt het dialoog venster OAuth-toestemming geactiveerd nadat de gebruiker zich heeft aangemeld.The prompt=consent claim triggers the OAuth consent dialog after the user signs in. In het dialoog venster wordt de gebruiker gevraagd om machtigingen te verlenen aan de app.The dialog asks the user to grant permissions to the app.
login_hint OptioneelOptional U kunt deze para meter gebruiken om het veld gebruikers naam en e-mail adres vooraf in te vullen op de aanmeldings pagina voor de gebruiker, als u de gebruikers naam van tevoren kent.You can use this parameter to pre-fill the username and email address field of the sign-in page for the user, if you know the username ahead of time. Apps gebruiken deze para meter vaak tijdens het opnieuw verifiëren, nadat u de gebruikers naam al hebt geëxtraheerd van een eerdere aanmelding met behulp van de preferred_username claim.Often, apps use this parameter during reauthentication, after already extracting the username from an earlier sign-in by using the preferred_username claim.
domain_hint OptioneelOptional De realm van de gebruiker in een federatieve Directory.The realm of the user in a federated directory. Hiermee wordt het detectie proces op basis van e-mail overs Laan dat de gebruiker op de aanmeldings pagina doorloopt, voor een iets meer gestroomlijnde gebruikers ervaring.This skips the email-based discovery process that the user goes through on the sign-in page, for a slightly more streamlined user experience. Voor tenants die zich bevinden in een on-premises Directory als AD FS, resulteert dit vaak in een naadloze aanmelding vanwege de bestaande aanmeldings sessie.For tenants that are federated through an on-premises directory like AD FS, this often results in a seamless sign-in because of the existing login session.

Op dit moment wordt de gebruiker gevraagd om hun referenties in te voeren en de verificatie te volt ooien.At this point, the user is prompted to enter their credentials and complete the authentication. Het micro soft Identity platform-eind punt controleert of de gebruiker heeft ingestemd met de machtigingen die zijn aangegeven in de scope query parameter.The Microsoft identity platform endpoint verifies that the user has consented to the permissions indicated in the scope query parameter. Als de gebruiker niet heeft ingestemd met een van deze machtigingen, wordt de gebruiker door het micro soft Identity platform-eind punt gevraagd om toestemming te geven voor de vereiste machtigingen.If the user hasn't consented to any of those permissions, the Microsoft identity platform endpoint prompts the user to consent to the required permissions. U kunt meer lezen over machtigingen, toestemming en apps met meerdere tenants.You can read more about permissions, consent, and multi-tenant apps.

Nadat de gebruiker zich heeft geverifieerd en toestemming verleent, retourneert het micro soft Identity platform-eind punt een antwoord op uw app bij de aangegeven omleidings-URI met behulp van de methode die is opgegeven in de response_mode para meter.After the user authenticates and grants consent, the Microsoft identity platform endpoint returns a response to your app at the indicated redirect URI by using the method specified in the response_mode parameter.

Geslaagde reactieSuccessful response

Een geslaagde reactie wanneer u response_mode=form_post er ongeveer als volgt uitziet:A successful response when you use response_mode=form_post looks like this:

POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNB...&state=12345
ParameterParameter BeschrijvingDescription
id_token Het ID-token dat de app heeft aangevraagd.The ID token that the app requested. U kunt de id_token para meter gebruiken om de identiteit van de gebruiker te verifiëren en een sessie met de gebruiker te starten.You can use the id_token parameter to verify the user's identity and begin a session with the user. Zie de id_tokens verwijzingvoor meer informatie over id-tokens en de inhoud ervan.For more information about ID tokens and their contents, see the id_tokens reference.
state Als een state para meter in de aanvraag is opgenomen, moet dezelfde waarde in het antwoord worden weer gegeven.If a state parameter is included in the request, the same value should appear in the response. De app moet controleren of de status waarden in de aanvraag en het antwoord identiek zijn.The app should verify that the state values in the request and response are identical.

Fout berichtError response

Fout reacties kunnen ook worden verzonden naar de omleidings-URI, zodat de app deze kan verwerken.Error responses might also be sent to the redirect URI so that the app can handle them. Een fout bericht ziet er als volgt uit:An error response looks like this:

POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

error=access_denied&error_description=the+user+canceled+the+authentication
ParameterParameter BeschrijvingDescription
error Een teken reeks voor de fout code die u kunt gebruiken om typen fouten te classificeren die optreden en om te reageren op fouten.An error code string that you can use to classify types of errors that occur, and to react to errors.
error_description Een specifiek fout bericht die u kan helpen bij het identificeren van de hoofd oorzaak van een verificatie fout.A specific error message that can help you identify the root cause of an authentication error.

Fout codes voor verificatie eindpunt foutenError codes for authorization endpoint errors

In de volgende tabel worden fout codes beschreven die kunnen worden geretourneerd in de error para meter van het fout bericht:The following table describes error codes that can be returned in the error parameter of the error response:

FoutcodeError code DescriptionDescription Client actieClient action
invalid_request Protocol fout, zoals een ontbrekende, vereiste para meter.Protocol error, such as a missing, required parameter. Corrigeer en verzend de aanvraag opnieuw.Fix and resubmit the request. Dit is een ontwikkelings fout die normaal gesp roken tijdens de eerste test wordt gedetecteerd.This is a development error that typically is caught during initial testing.
unauthorized_client De client toepassing kan geen autorisatie code aanvragen.The client application can't request an authorization code. Dit gebeurt meestal wanneer de client toepassing niet is geregistreerd in azure AD of niet is toegevoegd aan de Azure AD-Tenant van de gebruiker.This usually occurs when the client application isn't registered in Azure AD or isn't added to the user's Azure AD tenant. De toepassing kan de gebruiker vragen om de toepassing te installeren en deze toe te voegen aan Azure AD.The application can prompt the user with instructions to install the application and add it to Azure AD.
access_denied De resource-eigenaar heeft toestemming geweigerd.The resource owner denied consent. De client toepassing kan de gebruiker hiervan op de hoogte stellen dat deze niet kan door gaan, tenzij de gebruiker ermee akkoord gaat.The client application can notify the user that it can't proceed unless the user consents.
unsupported_response_type De autorisatie server biedt geen ondersteuning voor het antwoord type in de aanvraag.The authorization server does not support the response type in the request. Corrigeer en verzend de aanvraag opnieuw.Fix and resubmit the request. Dit is een ontwikkelings fout die normaal gesp roken tijdens de eerste test wordt gedetecteerd.This is a development error that typically is caught during initial testing.
server_error Er is een onverwachte fout opgetreden op de server.The server encountered an unexpected error. Voer de aanvraag opnieuw uit.Retry the request. Deze fouten kunnen worden veroorzaakt door tijdelijke voor waarden.These errors can result from temporary conditions. De client toepassing kan de gebruiker uitleggen dat de reactie is vertraagd vanwege een tijdelijke fout.The client application might explain to the user that its response is delayed because of a temporary error.
temporarily_unavailable De server is tijdelijk niet actief om de aanvraag af te handelen.The server is temporarily too busy to handle the request. Voer de aanvraag opnieuw uit.Retry the request. De client toepassing kan bijvoorbeeld verklaren dat de reactie van de gebruiker is vertraagd vanwege een tijdelijke voor waarde.The client application might explain to the user that its response is delayed because of a temporary condition.
invalid_resource De doel resource is ongeldig omdat deze niet bestaat, Azure AD niet kan worden gevonden of niet juist is geconfigureerd.The target resource is invalid because either it does not exist, Azure AD can't find it, or it isn't correctly configured. Dit geeft aan dat de resource, indien aanwezig, niet is geconfigureerd in de Tenant.This indicates that the resource, if it exists, hasn't been configured in the tenant. De toepassing kan de gebruiker vragen om instructies voor het installeren van de toepassing en het toevoegen aan Azure AD.The application can prompt the user with instructions for installing the application and adding it to Azure AD.

Het ID-token validerenValidate the ID token

Alleen het ontvangen van een id_token is niet altijd voldoende om de gebruiker te verifiëren. mogelijk moet u ook de hand tekening van de id_token valideren en de claims in het token verifiëren volgens de vereisten van uw app.Just receiving an id_token isn't always sufficient to authenticate the user; you may also need to validate the id_token's signature and verify the claims in the token per your app's requirements. Net als alle OIDC-platforms maakt het micro soft Identity platform-eind punt gebruik van JSON-Webtokens (JWTs) en open bare-sleutel cryptografie voor het ondertekenen van id-tokens en om te controleren of ze geldig zijn.Like all OIDC platforms, the Microsoft identity platform endpoint uses JSON Web Tokens (JWTs) and public key cryptography to sign ID tokens and verify that they're valid.

Niet alle apps profiteren van het controleren van de ID-token-systeem eigen apps en apps met één pagina, bijvoorbeeld zelden voor deel van het valideren van het ID-token.Not all apps benefit from verifying the ID token - native apps and single page apps, for instance, rarely benefit from validating the ID token. Iemand met fysieke toegang tot het apparaat (of browser) kan de validatie op tal van manieren overs Laan: van het bewerken van het webverkeer naar het apparaat om te voorzien in valse tokens en sleutels om de toepassing eenvoudigweg te debuggen om de validatie logica over te slaan.Someone with physical access to the device (or browser) can bypass the validation in many ways - from editing the web traffic to the device to provide fake tokens and keys to simply debugging the application to skip the validation logic. Op de andere kant moeten web-apps en Api's die gebruikmaken van een ID-token voor autorisatie, het ID-token zorgvuldig valideren omdat ze beperking toegang tot gegevens.On the other hand, web apps and APIs using an ID token to authorization must validate the ID token carefully since they are gating access to data.

Nadat u de hand tekening van de id_token hebt gevalideerd, moeten er enkele claims worden gecontroleerd.Once you've validated the signature of the id_token, there are a few claims you'll be required to verify. Zie de id_token referentie voor meer informatie, met inbegrip van het valideren van tokens en belang rijke informatie over de rollover van de handtekening sleutel.See the id_token reference for more information, including Validating Tokens and Important Information About Signing Key Rollover. We raden u aan om een bibliotheek te gebruiken voor het parseren en valideren van tokens. er is ten minste één beschikbaar voor de meeste talen en platformen.We recommend making use of a library for parsing and validating tokens - there is at least one available for most languages and platforms.

Het is ook mogelijk dat u aanvullende claims wilt valideren, afhankelijk van uw scenario.You may also wish to validate additional claims depending on your scenario. Enkele veelvoorkomende validaties zijn:Some common validations include:

  • Controleren of de gebruiker/organisatie zich heeft geregistreerd voor de app.Ensuring the user/organization has signed up for the app.
  • Controleren of de gebruiker de juiste autorisatie/bevoegdheden heeftEnsuring the user has proper authorization/privileges
  • Er is een zekere mate van verificatie uitgevoerd, zoals multi-factor Authentication.Ensuring a certain strength of authentication has occurred, such as multi-factor authentication.

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 te verkrijgen over de gebruiker in uw app.Once you have validated the id_token, you can begin a session with the user and use the claims in the id_token to obtain information about the user in your app. Deze informatie kan worden gebruikt voor weer gave, records, persoonlijke instellingen, enzovoort.This information can be used for display, records, personalization, etc.

Protocol diagram: verkrijgen van toegangs tokenProtocol diagram: Access token acquisition

Veel web-apps moeten de gebruiker niet alleen kunnen ondertekenen in, maar ook toegang hebben tot een webservice namens de gebruiker met behulp van OAuth.Many web apps need to not only sign the user in, but also to access a web service on behalf of the user by using OAuth. Dit scenario bevat een combi natie van OpenID Connect Connect voor gebruikers verificatie terwijl u tegelijkertijd een autorisatie code krijgt die u kunt gebruiken om toegangs tokens op te halen als u de OAuth-autorisatie code stroom gebruikt.This scenario combines OpenID Connect for user authentication while simultaneously getting an authorization code that you can use to get access tokens if you are using the OAuth authorization code flow.

De volledige OpenID connect-verbinding voor het aanmelden en de token verwervings stroom ziet er ongeveer uit als in het volgende diagram.The full OpenID Connect sign-in and token acquisition flow looks similar to the next diagram. In de volgende gedeelten van het artikel worden elke stap uitvoerig beschreven.We describe each step in detail in the next sections of the article.

OpenID Connect Connect Protocol: verwerving van tokens

Een toegangs Token ophalen om user info aan te roepenGet an access token to call UserInfo

Als u een token voor het OIDC user info-eind punt wilt verkrijgen, wijzigt u de aanmeldings aanvraag:To acquire a token for the OIDC UserInfo endpoint, modify the sign-in request:

// Line breaks are for legibility only.

GET https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e        // Your registered Application ID
&response_type=id_token%20token                       // this will return both an id_token and an access token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F       // Your registered redirect URI, URL encoded
&response_mode=form_post                              // 'form_post' or 'fragment'
&scope=openid+profile+email                           // `openid` is required.  `profile` and `email` provide additional information in the UserInfo endpoint the same way they do in an ID token. 
&state=12345                                          // Any value, provided by your app
&nonce=678910                                         // Any value, provided by your app

U kunt ook de autorisatie code stroom, de code stroomvan het apparaat of een vernieuwings token in plaats van gebruiken response_type=token om een token voor uw app op te halen.You can also use the authorization code flow, the device code flow, or a refresh token in place of response_type=token to get a token for your app.

Tip

Klik op de volgende koppeling om deze aanvraag uit te voeren.Click the following link to execute this request. Nadat u zich hebt aangemeld, wordt uw browser omgeleid naar https://localhost/myapp/ met een ID-token en een token in de adres balk.After you sign in, your browser is redirected to https://localhost/myapp/, with an ID token and a token in the address bar. Houd er rekening mee dat deze aanvraag response_mode=fragment alleen voor demonstratie doeleinden wordt gebruikt. u wordt aangeraden om, form_post waar mogelijk, extra beveiliging te gebruiken voor een webapp.Note that this request uses response_mode=fragment for demonstration purposes only - for a webapp we recommend using form_post for additional security where possible. https://login.microsoftonline.com/common/oauth2/v2.0/authorize...https://login.microsoftonline.com/common/oauth2/v2.0/authorize...

Geslaagde token reactieSuccessful token response

Een geslaagde reactie van het gebruik van response_mode=form_post ziet er als volgt uit:A successful response from using response_mode=form_post looks like this:

POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
 access_token=eyJ0eXAiOiJKV1QiLCJub25jZSI6I....
 &token_type=Bearer
 &expires_in=3598
 &scope=email+openid+profile
 &id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI....
 &state=12345

Antwoord parameters betekenen hetzelfde, ongeacht de stroom die wordt gebruikt om ze te verkrijgen.Response parameters mean the same thing regardless of the flow used to acquire them.

ParameterParameter BeschrijvingDescription
token Het token dat wordt gebruikt om het user info-eind punt aan te roepen.The token that will be used to call the UserInfo endpoint.
token_type Altijd ' Bearer 'Always "Bearer"
expires_in Hoe lang duurt totdat het toegangs token is verlopen, in seconden.How long until the access token expires, in seconds.
scope De machtigingen die zijn verleend voor het toegangs token.The permissions granted on the access token. Houd er rekening mee dat omdat het user info-eind punt wordt gehost op MS Graph, er mogelijk extra Graph-bereiken worden weer gegeven (bijvoorbeeld User. Read) als ze eerder aan de app zijn verleend.Note that since the UserInfo endpoint is hosted on MS Graph, there may be additional Graph scopes listed here (e.g. user.read) if they were previously granted to the app. Dat komt omdat een token voor een bepaalde resource altijd elke machtiging omvat die momenteel aan de client wordt verleend.That's because a token for a given resource always includes every permission currently granted to the client.
id_token Het ID-token dat de app heeft aangevraagd.The ID token that the app requested. U kunt het ID-token gebruiken om de identiteit van de gebruiker te verifiëren en een sessie met de gebruiker te starten.You can use the ID token to verify the user's identity and begin a session with the user. Meer informatie over ID-tokens en de bijbehorende inhoud vindt u in de id_tokens verwijzing.You'll find more details about ID tokens and their contents in the id_tokens reference.
state Als een para meter State is opgenomen in de aanvraag, moet dezelfde waarde in het antwoord worden weer gegeven.If a state parameter is included in the request, the same value should appear in the response. De app moet controleren of de status waarden in de aanvraag en het antwoord identiek zijn.The app should verify that the state values in the request and response are identical.

Fout berichtError response

Fout reacties kunnen ook worden verzonden naar de omleidings-URI, zodat de app deze op de juiste wijze kan afhandelen.Error responses might also be sent to the redirect URI so that the app can handle them appropriately. Een fout bericht ziet er als volgt uit:An error response looks like this:

POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded

error=access_denied&error_description=the+user+canceled+the+authentication
ParameterParameter BeschrijvingDescription
error Een teken reeks voor de fout code die u kunt gebruiken om typen fouten te classificeren die optreden en om te reageren op fouten.An error code string that you can use to classify types of errors that occur, and to react to errors.
error_description Een specifiek fout bericht die u kan helpen bij het identificeren van de hoofd oorzaak van een verificatie fout.A specific error message that can help you identify the root cause of an authentication error.

Zie voor een beschrijving van mogelijke fout codes en aanbevolen client reacties fout codes voor verificatie eindpunt fouten.For a description of possible error codes and recommended client responses, see Error codes for authorization endpoint errors.

Wanneer u een autorisatie code en een ID-token hebt, kunt u de gebruiker ondertekenen in en toegangs tokens voor hun naam krijgen.When you have an authorization code and an ID token, you can sign the user in and get access tokens on their behalf. Als u de gebruiker wilt ondertekenen in, moet u de ID-token precies zo valideren als beschreven.To sign the user in, you must validate the ID token exactly as described. Volg de stappen die worden beschreven in de documentatie van de OAuth-code stroomom toegangs tokens te verkrijgen.To get access tokens, follow the steps described in OAuth code flow documentation.

Het user info-eind punt aanroepenCalling the UserInfo endpoint

Raadpleeg de documentatie van user info om te zien hoe het aanroepen van het user info-eind punt met dit token.Review the UserInfo documentation to look over how the call the UserInfo endpoint with this token.

Een afmeldings aanvraag verzendenSend a sign-out request

Wanneer u de gebruiker wilt afmelden bij uw app, is het niet voldoende om de cookies van uw app te wissen of de sessie van de gebruiker anderszins te beëindigen.When you want to sign out the user from your app, it isn't sufficient to clear your app's cookies or otherwise end the user's session. U moet ook de gebruiker omleiden naar het micro soft Identity platform-eind punt om u af te melden. Als u dit niet doet, wordt de gebruiker opnieuw geverifieerd bij uw app zonder dat ze hun referenties opnieuw in te voeren, omdat ze een geldige sessie voor eenmalige aanmelding met het micro soft Identity platform-eind punt hebben.You must also redirect the user to the Microsoft identity platform endpoint to sign out. If you don't do this, the user reauthenticates to your app without entering their credentials again, because they will have a valid single sign-in session with the Microsoft identity platform endpoint.

U kunt de gebruiker omleiden naar de end_session_endpoint lijst in het OpenID Connect Connect meta data-document:You can redirect the user to the end_session_endpoint listed in the OpenID Connect metadata document:

GET https://login.microsoftonline.com/common/oauth2/v2.0/logout?
post_logout_redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
ParameterParameter VoorwaardeCondition DescriptionDescription
post_logout_redirect_uri AanbevolenRecommended De URL waarnaar de gebruiker wordt omgeleid na het afmelden. Als de para meter niet is opgenomen, wordt de gebruiker een algemeen bericht weer gegeven dat wordt gegenereerd door het micro soft Identity platform-eind punt.The URL that the user is redirected to after successfully signing out. If the parameter isn't included, the user is shown a generic message that's generated by the Microsoft identity platform endpoint. Deze URL moet overeenkomen met een van de omleidings-Uri's die zijn geregistreerd voor uw toepassing in de app-registratie Portal.This URL must match one of the redirect URIs registered for your application in the app registration portal.

Eenmalige afmeldingSingle sign-out

Wanneer u de gebruiker omleidt naar de end_session_endpoint , wordt de sessie van de gebruiker uit de browser gewist met het micro soft Identity platform-eind punt.When you redirect the user to the end_session_endpoint, the Microsoft identity platform endpoint clears the user's session from the browser. De gebruiker kan echter nog steeds zijn aangemeld bij andere toepassingen die gebruikmaken van micro soft-accounts voor authenticatie.However, the user may still be signed in to other applications that use Microsoft accounts for authentication. Om ervoor te zorgen dat deze toepassingen de gebruiker gelijktijdig kunnen ondertekenen, stuurt het micro soft Identity platform-eind punt een HTTP GET-aanvraag naar de geregistreerde LogoutUrl van alle toepassingen waarbij de gebruiker momenteel is aangemeld.To enable those applications to sign the user out simultaneously, the Microsoft identity platform endpoint sends an HTTP GET request to the registered LogoutUrl of all the applications that the user is currently signed in to. Toepassingen moeten reageren op deze aanvraag door een wille keurige sessie te wissen waarmee de gebruiker wordt geïdentificeerd en een antwoord wordt geretourneerd 200 .Applications must respond to this request by clearing any session that identifies the user and returning a 200 response. Als u eenmalige afmelding wilt ondersteunen in uw toepassing, moet u deze implementeren LogoutUrl in de code van uw toepassing.If you wish to support single sign-out in your application, you must implement such a LogoutUrl in your application's code. U kunt de LogoutUrl app-registratie-Portal instellen.You can set the LogoutUrl from the app registration portal.

Volgende stappenNext steps