Type d'octroi d'assertion

A utiliser lorsque vous souhaitez utiliser une relation d'approbation existante exprimée en tant qu'assertion et sans étape d'approbation directe par l'utilisateur sur le serveur d'autorisation OAuth.

Le diagramme suivant présente le flux Type d'octroi d'assertion.

Diagramme illustrant le flux Type d'octroi d'assertion.

Dans ce flux OAuth :

  1. Un utilisateur tente d'accéder à une application client en envoyant une assertion utilisateur générée.
    Remarque

    Le processus d'acquisition de l'assertion est hors de portée pour cette explication
  2. L'application client demande un jeton d'accès, et souvent un jeton d'actualisation, en fournissant une assertion utilisateur ou une assertion utilisateur tierce et des informations d'identification client.

  3. Le serveur d'autorisation renvoie le jeton d'accès à l'application client.

  4. L'application client utilise le jeton d'accès dans un appel d'API pour obtenir des données protégées, telles qu'une liste d'utilisateurs.

Fonction Disponible
Requiert l'authentification client Oui
Le client doit connaître les informations d'identification utilisateur Non
Interaction avec l'utilisateur final via navigateur

Remarque : le processus de génération de l'assertion peut impliquer une interaction utilisateur.

Non
Peut utiliser un fournisseur d'identités externe pour l'authentification Oui
Le jeton d'actualisation est autorisé Oui
Le jeton d'accès se trouve dans le contexte de l'utilisateur final

Un jeton d'accès sera dans le contexte de l'objet de l'assertion, qui peut être un utilisateur final, un service ou le client lui-même.

Peut-être

Reportez-vous à un exemple de flux d'autorisation Type d'octroi d'assertion.

Exemple de flux d'autorisation de type d'octroi d'assertion

Dans cet exemple de flux, Example.com s'est abonné à plusieurs applications Oracle Cloud PaaS et SaaS. Les utilisateurs Example.com veulent pouvoir accéder aux propriétés Oracle Cloud sans avoir à passer par le processus d'autorisation eux-mêmes (autorisation déléguée).

Remarque

Dans cet exemple, la commande utilise la structure d'URL https://<domainURL>/resource-path, où <domainURL> représente l'URL du service d'identité et le chemin de ressource représente l'API du service d'identité. Pour connaître la structure d'URL appropriée à utiliser, reportez-vous à Envoyer des demandes.
Lorsque vous créez une application à l'aide du type d'octroi Assertion dans la console du domaine d'identité :
  • Indiquez le type d'application Application mobile.

  • Sélectionnez le type d'octroi Assertion.

Pour plus d'informations sur le type d'octroi Assertion et un diagramme de flux d'autorisation, reportez-vous à Type d'octroi d'assertion.

Flux d'autorisation

  1. Un utilisateur tente d'accéder à une application client (telle que JCS).

    L'URL contient des paramètres de requête qui indiquent le type d'accès demandé. L'assertion SAML2 est encodée en Base64 et la valeur de destinataire dans l'assertion SAML doit être l'une des suivantes :

    • Emetteur dans le champ Emetteur des paramètres OAuth de l'interface utilisateur.
    • Ou bien, https://<domainURL>/.
    • Ou, la valeur de secure_saml_sp_sso_endpoint dans la réponse de repérage.
    Exemple de demande utilisant l'en-tête d'autorisation
       curl -i
       -H 'Authorization: Basic <base64Encoded clientid:secret>'
       -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
       --request POST https://<domainURL>/oauth2/v1/token 
       -d 'grant_type=password&username=<user-name>&password=<example-password>&scope=<scope value>'

    Exemple de demande utilisant l'en-tête d'autorisation, y compris le jeton d'actualisation dans la demande

       curl -i
       -H 'Authorization: Basic <base64Encoded clientid:secret>'
       -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
       --request POST https://<domainURL>/oauth2/v1/token 
       -d 'grant_type=password&username=<user-name>&password=<example-password>&scope=<Resource Server Scope>%20offline_access'

    Exemple de demande utilisant une assertion client JWT

       curl -i
       -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
       --request POST https://<domainURL>/oauth2/v1/token 
       -d 'grant_type=password&username=<user-name>&password=<example-password>&client_id=<client-id>&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<client-assertion>&scope=<scope value>'

    Exemple de demande utilisant une assertion client JWT incluant un jeton d'actualisation dans la demande

       curl -i
       -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
       --request POST https://<domainURL>/oauth2/v1/token 
       -d 'grant_type=password&username=<user-name>&password=<example-password>&client_id=<client-id>&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<client-assertion>&scope=<Resource Server Scope>%20offline_access'

    Exemple de demande avec mTLS

    Pour savoir comment obtenir le fichier secureDomainURL, reportez-vous à Types d'octroi d'accès.

    curl -v \
    --cert cert.crt \
    --key key.key \
    --cacert ca.crt \
    --location '<secureDomainURL>/oauth2/v1/token' \
    --header 'Authorization: Basic <base64Encoded clientid:secret>'
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=client_credentials' \
    --data-urlencode 'client_id=<client-id>' \
    --data-urlencode 'scope=urn:opc:idm:_myscopes_'
  2. Un agent Oracle Web Services Manager (côté client) intercepte l'application client en faisant un appel d'API REST vers le serveur de ressources (applications Fusion) pour obtenir un jeton d'accès.

  3. Le serveur d'autorisation OAuth authentifie l'application client en fonction de l'en-tête d'autorisation ou de l'assertion envoyée, et renvoie un jeton d'accès contenant toutes les portées applicables en fonction des privilèges représentés par les rôles d'application accordés à l'application client requérante.

  4. L'utilisateur peut accéder à une application OPC à partir d'une autre application OPC.