Utilisation de l'API d'authentification pour développer une page de connexion personnalisée
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité afin de développer une page de connexion personnalisée pour un domaine d'identité.
Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
L'API d'authentification est basée sur le concept de machine à états. Les réponses aux demandes informent un client d'application de ce qui doit être fait ensuite plutôt que d'exiger des utilisateurs que les cookies tiers soient activés dans leur navigateur. Les cookies tiers activés dans les navigateurs peuvent poser des problèmes, en particulier pour les applications B2C où les contrôles sur le comportement de l'utilisateur final ne peuvent pas être appliqués. L'élément requestState
fourni dans chaque réponse de demande est utilisé dans la demande suivante, fournissant au client les informations dont il a besoin pour traiter la demande, puis fournissant l'ensemble d'opérations suivant autorisé.
- Vous aide à vérifier les informations d'identification de nom utilisateur et de mot de passe d'un utilisateur en tant qu'authentification principale.
- Prendre en charge l'inscription des utilisateurs avec les facteurs d'authentification à plusieurs facteurs activés par l'administrateur
- Renforcer la sécurité de l'authentification par mot de passe à l'aide de l'authentification à plusieurs facteurs (MFA) en exigeant une vérification supplémentaire, comme l'utilisation d'un code secret à usage unique basé sur le temps ou d'un code secret SMS.
- Autorisez vos utilisateurs à sélectionner un SAML externe ou un fournisseur d'identités sociales pour l'authentification.
Reportez-vous à la collection Postman de l'API d'authentification des domaines d'identité pour obtenir des exemples détaillés de cas d'utilisation de l'authentification. Téléchargez la collection et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans GitHub, puis importez-les dans Postman.
- Authentification d'un fournisseur d'identité SAML externe
- Authentification d'un fournisseur d'identités SAML social
- Authentification à l'aide d'un fournisseur d'identités SAML externe et de l'authentification à plusieurs facteurs
- Authentification avec nom utilisateur et mot de passe
- Authentification du nom d'utilisateur et du mot de passe avec consentement PT
- Génération d'un jeton d'accès à l'aide de l'API d'authentification
- Authentification du nom d'utilisateur et du mot de passe et inscription à la récupération de compte
- Authentification du nom d'utilisateur et du mot de passe, inscription à la récupération de compte et à l'authentification à plusieurs facteurs
- Authentification à l'aide du nom utilisateur et du mot de passe, et inscription à l'authentification à plusieurs facteurs
- Authentification à l'aide du nom utilisateur, du mot de passe et de l'authentification à plusieurs facteurs
Codes de statut d'API d'authentification à la demande et d'authentification à plusieurs facteurs
Authentification à l'aide d'un fournisseur d'identités SAML externe
Ce cas d'utilisation décrit les étapes d'utilisation des domaines d'identité pour l'authentification à l'aide d'un fournisseur d'identités SAML externe (IdP).
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Etape 1 : lancement du flux d'authentification
Un utilisateur ouvre une fenêtre de navigateur pour accéder à une page protégée.
/authorize
. Cela lance le processus d'authentification. Au lieu de présenter la page de connexion par défaut, les domaines d'identité répondent en créant et en soumettant un formulaire HTML contenant les paramètres loginCtx
et signature
au navigateur.Vous devez exposer une adresse pour recevoir la publication du formulaire et lire les deux valeurs de paramètre.
Exemple de formulaire HTML POST
Voici un exemple de formulaire HTML POST que les domaines d'identité renvoient pour appeler la page de connexion personnalisée :
<form name="autosubmit" id="autosubmit" action="<custom_ui_signin_URL>" method="POST" onload="submitform();">
<input name="loginCtx" value="<obfuscated_loginctx_value>" />
<input name="signature" value="signature_data" />
</form>
loginCtx
étant crypté par based64, l'application de connexion personnalisée doit décrypter loginCtx
en procédant comme suit :- Décoder à l'aide d'un décodeur base64 pour obtenir les données binaires cryptées
- Utiliser le nom du locataire et générer une clé pour le décryptage
- Décrypter les données à l'aide de la clé et des données binaires
Exemple de logique de décryptage pour loginCtx crypté dans Java
Voici un exemple de logique de décryptage :
public static String decrypt(String tenantName, String attrName, String attrDecryptValue ) {
String attrDecrypt = attrDecryptValue;
final String SHA_256_ALG = "SHA-256";
final String ENCRYPTION_ALG = "AES/CBC/PKCS5Padding";
final String SECRET_KEY_ALG = "AES";
String data = null;
MessageDigest md = null;
byte[] keyBytes = new byte[16];
try {
md = JCECryptoCache.getMessageDigestInstance(SHA_256_ALG);
byte[] digest = md.digest(tenantName.toLowerCase().getBytes("UTF-8"));
System.arraycopy(digest, 0, keyBytes, 0, 16);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
JCECryptoCache.releaseMessageDigestInstance(md);
}
// encrypt the data
Cipher decipher = null;
try {
decipher = JCECryptoCache.getCipherInstance(ENCRYPTION_ALG);
SecretKey secretKey = new SecretKeySpec(keyBytes, SECRET_KEY_ALG);
decipher.init(Cipher.DECRYPT_MODE,
secretKey, new IvParameterSpec(new byte[16]));
byte[] decryptedData = decipher.doFinal(Base64.getDecoder().decode(attrDecrypt.getBytes("UTF-8")));
data = new String(decryptedData);
System.out.println("" + data);
} catch (Exception ex) {
ex.printStackTrace();
}
return data;
}
Exemple de réponse
La réponse doit être similaire à l'exemple suivant :
{
"requestState": "TasNtIxDqWOfDKeTM",
"nextOp": [
"credSubmit",
"chooseIDP"
],
"nextAuthFactors": [
"IDP",
"USERNAME_PASSWORD"
],
"status": "success",
"ecId": "GmY95180000000000",
"USERNAME_PASSWORD": {
"credentials": [
"username",
"password"
]
},
"IDP": {
"configuredIDPs": [
{
"iconUrl": "null",
"idpName": "adc00peq",
"idpType": "Saml"
},
{
"idpId": "4bb89888feea4b00a0fab3a1a5627539",
"idpName": "Google",
"idpType": "Social"
}
],
"credentials": [
"idpId",
"idpType"
]
}
}
loginCtx
contient des attributs importants :- requestState : état du processus d'authentification. Il doit être utilisé dans les POST et GET futurs pour les adresses d'API d'authentification des domaines d'identité.
- nextOp : opération suivante que l'application de connexion personnalisée doit effectuer.
- nextAuthFactors : facteurs d'authentification possibles que la page de connexion doit présenter.
Les valeurs de ces attributs définissent le facteur d'authentification, les fournisseurs d'identités et les fournisseurs de réseaux sociaux qui sont présentés sur la page de connexion. La page de connexion apparaît avec les valeurs décryptées du paramètre loginCtx
et le jeton d'accès. La page de connexion inclut JavaScript utilisé pour effectuer des appels AJAX vers des domaines d'identité.
Etape 2 : Sélectionner un fournisseur d'identités SAML
/sso/v1/sdk/idp
. Pour cette étape, les attributs suivants doivent être inclus :requestState:
reçu dans la réponse de l'étape 1- Nom
idpName:
du fichier IdP reçu dans la réponse de l'étape 1 - Type
idpType:
de IdP reçu dans la réponse de l'étape 1 (dans cet exemple, il s'agit de SAML) - ID
idpId:
de l'élément IdP reçu dans la réponse de l'étape 1 appName:
nom de l'application à laquelle le client souhaite accéder- ID client
clientID:
de l'application à laquelle le navigateur tente d'accéder - Paramètre
authorization:
requis pour le fournisseur d'identités sécurisé
Exemple de code POST de formulaire HTML pour sélectionner un IdP SAML
var addParamValues = function(myform, value, paramName) {
if (value !== null && value !== 'undefined') {
param = document.createElement("input");
param.value = value;
param.name = paramName;
myform.appendChild(param);
}
};
var chooseRemoteIDP = function(name, idpId, type) {
var myform = document.createElement("form");
myform.action = GlobalConfig.idcsBaseURL + "/sso/v1/sdk/secure/idp";
myform.method = "post";
<%
Credentials creds = CredentialsList.getCredentials().get(attr);
String clientId = creds.getId();
%>
var clientId = '<%=clientId%>';
addParamValues(myform, name, "idpName");
addParamValues(myform, type, "idpType");
addParamValues(myform, idpId, "idpId");
addParamValues(myform, clientId, "clientId");
addParamValues(myform, authorization, "accesstoken")
addParamValues(myform, GlobalConfig.requestState, "requestState");
document.body.appendChild(myform);
myform.submit();
};
var activateIdp = function(name, idpId) {
chooseRemoteIDP(name, idpId, "SAML");
};
var activateSocialIdp = function(name, idpId) {
chooseRemoteIDP(name, idpId, "SOCIAL");
};
Exemple de demande
Voici un exemple du contenu de l'autotest FORM POST vers l'adresse /sso/v1/sdk/secure/idp
:
requestState=value&idpName=value&idpType=SAML&idpId=value&appName=name&clientID=value&authorization=accesstoken
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format HTTP standard :
HTTP/1.1 302 See Other
Date: Tue, 30 Oct 2018 04:40:05 GMT
Content-Length: 0
Connection: keep-alive
Pragma: no-cache
Location: https://<domainURL>/idp/sso (Example URL)
Set-cookie: ORA_OCIS_REQ_1=+fxgW2P7bgQayiki5P;Version=1;Path=/;Secure;HttpOnly
Expires: Sat, 01 Jan 2000 00:00:00 GMT
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Les domaines d'identité traitent la demande et redirigent le navigateur vers le fichier IdP externe sélectionné pour authentification et autorisation. Lorsque l'option IdP externe est terminée, le navigateur est redirigé vers les domaines d'identité. Les domaines d'identité valident la réponse d'assertion et vérifient si une authentification supplémentaire, telle que l'authentification à plusieurs facteurs, est requise.
Si aucune authentification supplémentaire n'est requise, les domaines d'identité créent la session et redirigent le navigateur vers l'URL cible. Sinon, les domaines d'identité créent une soumission automatique HTML FORM POST vers la page de connexion personnalisée contenant authnToken
. La page de connexion personnalisée crée ensuite la session. Reportez-vous à la section Creating a Session.
Authentification auprès d'un fournisseur d'identités sociales
Ce cas d'utilisation décrit les étapes d'utilisation des domaines d'identité pour l'authentification à l'aide d'un fournisseur d'identités sociales (IdP), tel que Facebook ou Google.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Etape 1 : lancement du flux d'authentification
Un utilisateur ouvre une fenêtre de navigateur pour accéder à une page protégée.
/authorize
. Cela lance le processus d'authentification. Au lieu de présenter la page de connexion par défaut, les domaines d'identité répondent en créant et en soumettant un formulaire HTML contenant les paramètres loginCtx
et signature
au navigateur.Vous devez exposer une adresse pour recevoir la publication du formulaire et lire les deux valeurs de paramètre.
Exemple de formulaire HTML POST
Voici un exemple de formulaire HTML POST que les domaines d'identité renvoient pour appeler la page de connexion personnalisée :
<form name="autosubmit" id="autosubmit" action="<custom_ui_signin_URL>" method="POST" onload="submitform();">
<input name="loginCtx" value="<obfuscated_loginctx_value>" />
<input name="signature" value="signature_data" />
</form>
loginCtx
étant crypté par based64, l'application de connexion personnalisée doit décrypter loginCtx
en procédant comme suit :Exemple de logique de décryptage pour loginCtx crypté dans Java
Voici un exemple de logique de décryptage :
public static String decrypt(String tenantName, String attrName, String attrDecryptValue ) {
String attrDecrypt = attrDecryptValue;
final String SHA_256_ALG = "SHA-256";
final String ENCRYPTION_ALG = "AES/CBC/PKCS5Padding";
final String SECRET_KEY_ALG = "AES";
String data = null;
MessageDigest md = null;
byte[] keyBytes = new byte[16];
try {
md = JCECryptoCache.getMessageDigestInstance(SHA_256_ALG);
byte[] digest = md.digest(tenantName.toLowerCase().getBytes("UTF-8"));
System.arraycopy(digest, 0, keyBytes, 0, 16);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
JCECryptoCache.releaseMessageDigestInstance(md);
}
// encrypt the data
Cipher decipher = null;
try {
decipher = JCECryptoCache.getCipherInstance(ENCRYPTION_ALG);
SecretKey secretKey = new SecretKeySpec(keyBytes, SECRET_KEY_ALG);
decipher.init(Cipher.DECRYPT_MODE,
secretKey, new IvParameterSpec(new byte[16]));
byte[] decryptedData = decipher.doFinal(Base64.getDecoder().decode(attrDecrypt.getBytes("UTF-8")));
data = new String(decryptedData);
System.out.println("" + data);
} catch (Exception ex) {
ex.printStackTrace();
}
return data;
}
Exemple de réponse
La réponse doit être similaire à l'exemple suivant :
{
"requestState": "TasNtIxDqWOfDKeTM",
"nextOp": [
"credSubmit",
"chooseIDP"
],
"nextAuthFactors": [
"IDP",
"USERNAME_PASSWORD"
],
"status": "success",
"ecId": "GmY95180000000000",
"USERNAME_PASSWORD": {
"credentials": [
"username",
"password"
]
},
"IDP": {
"configuredIDPs": [
{
"iconUrl": "null",
"idpName": "adc00peq",
"idpType": "Saml"
},
{
"idpId": "4bb89888feea4b00a0fab3a1a5627539",
"idpName": "Google",
"idpType": "Social"
}
],
"credentials": [
"idpId",
"idpType"
]
}
}
loginCtx
contient des attributs importants :Les valeurs de ces attributs définissent le facteur d'authentification, les fournisseurs d'identités et les fournisseurs de réseaux sociaux qui sont présentés sur la page de connexion. La page de connexion apparaît avec les valeurs décryptées du paramètre loginCtx
et le jeton d'accès. La page de connexion inclut JavaScript utilisé pour effectuer des appels AJAX vers des domaines d'identité.
Etape 2 : sélection d'un fournisseur d'identités sociales
/sso/v1/sdk/idp
. Pour cette étape, les attributs suivants doivent être inclus :Exemple de code POST de formulaire HTML pour sélectionner un réseau social IdP
var addParamValues = function(myform, value, paramName) {
if (value !== null && value !== 'undefined') {
param = document.createElement("input");
param.value = value;
param.name = paramName;
myform.appendChild(param);
}
};
var chooseRemoteIDP = function(name, idpId, type) {
var myform = document.createElement("form");
myform.action = GlobalConfig.idcsBaseURL + "/sso/v1/sdk/secure/idp";
myform.method = "post";
<%
Credentials creds = CredentialsList.getCredentials().get(attr);
String clientId = creds.getId();
%>
var clientId = '<%=clientId%>';
addParamValues(myform, name, "idpName");
addParamValues(myform, type, "idpType");
addParamValues(myform, idpId, "idpId");
addParamValues(myform, clientId, "clientId");
addParamValues(myform, authorization, "accesstoken")
addParamValues(myform, GlobalConfig.requestState, "requestState");
document.body.appendChild(myform);
myform.submit();
};
var activateIdp = function(name, idpId) {
chooseRemoteIDP(name, idpId, "SAML");
};
var activateSocialIdp = function(name, idpId) {
chooseRemoteIDP(name, idpId, "SOCIAL");
};
Exemple de demande
Voici un exemple du contenu de l'autotest FORM POST vers l'adresse /sso/v1/sdk/secure/idp
:
requestState=value&idpName=value&idpType=Social&idpId=value&appName=name&clientID=value&authorization=accesstoken
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
HTTP/1.1 302 See Other
Date: Tue, 30 Oct 2018 04:40:05 GMT
Content-Length: 0
Connection: keep-alive
Pragma: no-cache
Location: https://<domainURL>/idp/sso (Example URL)
Set-cookie: ORA_OCIS_REQ_1=+fxgW2P7bgQayiki5P;Version=1;Path=/;Secure;HttpOnly
Expires: Sat, 01 Jan 2000 00:00:00 GMT
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Les domaines d'identité traitent la demande et redirigent le navigateur vers le réseau social IdP sélectionné pour authentification et autorisation. Lorsque le réseau social IdP est terminé, le navigateur est redirigé vers les domaines d'identité. Les domaines d'identité valident la réponse d'assertion et vérifient si une authentification supplémentaire, telle que l'authentification à plusieurs facteurs, est requise.
Si aucune authentification supplémentaire n'est requise, les domaines d'identité créent la session et redirigent le navigateur vers l'URL cible. Sinon, les domaines d'identité créent une soumission automatique HTML FORM POST vers la page de connexion personnalisée contenant authnToken
. La page de connexion personnalisée crée ensuite la session. Reportez-vous à la section Creating a Session.
Authentification à l'aide d'un fournisseur d'identités SAML externe et de l'authentification à plusieurs facteurs
Ce cas d'utilisation décrit les étapes d'utilisation des domaines d'identité pour l'authentification à l'aide d'un fournisseur d'identités SAML externe (IdP) et de l'authentification multifacteur (MFA).
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Etape 1 : lancement du flux d'authentification
Un utilisateur ouvre une fenêtre de navigateur pour accéder à une page protégée.
/authorize
. Cela lance le processus d'authentification. Au lieu de présenter la page de connexion par défaut, les domaines d'identité répondent en créant et en soumettant un formulaire HTML contenant les paramètres loginCtx
et signature
au navigateur.Vous devez exposer une adresse pour recevoir la publication du formulaire et lire les deux valeurs de paramètre.
Exemple de formulaire HTML POST
Voici un exemple de formulaire HTML POST que les domaines d'identité renvoient pour appeler la page de connexion personnalisée :
<form name="autosubmit" id="autosubmit" action="<custom_ui_signin_URL>" method="POST" onload="submitform();">
<input name="loginCtx" value="<obfuscated_loginctx_value>" />
<input name="signature" value="signature_data" />
</form>
loginCtx
étant crypté par based64, l'application de connexion personnalisée doit décrypter loginCtx
en procédant comme suit :- Décoder à l'aide d'un décodeur base64 pour obtenir les données binaires cryptées
- Utiliser le nom du locataire et générer une clé pour le décryptage
- Décrypter les données à l'aide de la clé et des données binaires
Exemple de logique de décryptage pour loginCtx crypté dans Java
Voici un exemple de logique de décryptage :
public static String decrypt(String tenantName, String attrName, String attrDecryptValue)
{
String attrDecrypt = attrDecryptValue;
final String SHA_256_ALG = "SHA-256";
final String ENCRYPTION_ALG = "AES/CBC/PKCS5Padding";
final String SECRET_KEY_ALG = "AES";
String data = null;
MessageDigest md = null;
byte[] keyBytes = new byte[16];
try {
md = MessageDigest.getInstance(SHA_256_ALG);
byte[] digest = md.digest(tenantName.toLowerCase().getBytes("UTF-8"));
System.arraycopy(digest, 0, keyBytes, 0, 16);
} catch (Exception ex)
{
ex.printStackTrace();
}
// encrypt the data
Cipher decipher = null;
try {
decipher = Cipher.getInstance(ENCRYPTION_ALG);
SecretKey secretKey = new SecretKeySpec(keyBytes, SECRET_KEY_ALG);
decipher.init(Cipher.DECRYPT_MODE,
secretKey, new IvParameterSpec(new byte[16]));
byte[] decryptedData = decipher.doFinal(Base64.getDecoder().decode(attrDecrypt.getBytes("UTF-8")));
data = new String(decryptedData);
System.out.println("" + data); }
catch (Exception ex)
{
ex.printStackTrace();
}
return data;
}
Exemple de réponse
La réponse doit être similaire à l'exemple suivant :
{
"requestState": "TasNtIxDqWOfDKeTM",
"nextOp": [
"credSubmit",
"chooseIDP"
],
"nextAuthFactors": [
"IDP",
"USERNAME_PASSWORD"
],
"status": "success",
"ecId": "GmY95180000000000",
"USERNAME_PASSWORD": {
"credentials": [
"username",
"password"
]
},
"IDP": {
"configuredIDPs": [
{
"iconUrl": "null",
"idpName": "adc00peq",
"idpType": "Saml"
},
{
"idpId": "4bb89888feea4b00a0fab3a1a5627539",
"idpName": "Google",
"idpType": "Social"
}
],
"credentials": [
"idpId",
"idpType"
]
}
}
loginCtx
contient des attributs importants :- requestState : état du processus d'authentification. Il doit être utilisé dans les POST et GET futurs pour les adresses d'API d'authentification des domaines d'identité.
- nextOp : opération suivante que l'application de connexion personnalisée doit effectuer.
- nextAuthFactors : facteurs d'authentification possibles que la page de connexion doit présenter.
Les valeurs de ces attributs définissent le facteur d'authentification, les fournisseurs d'identités et les fournisseurs de réseaux sociaux qui sont présentés sur la page de connexion. La page de connexion apparaît avec les valeurs décryptées du paramètre loginCtx
et le jeton d'accès. La page de connexion inclut JavaScript utilisé pour effectuer des appels AJAX vers des domaines d'identité.
Etape 2 : sélection d'un fournisseur d'identités externe
/sso/v1/sdk/idp
. Pour cette étape, les attributs suivants doivent être inclus :requestState:
reçu dans la réponse de l'étape 1- Nom
idpName:
du fichier IdP reçu dans la réponse de l'étape 1 - Type
idpType:
de IdP reçu dans la réponse de l'étape 1 (dans cet exemple, il s'agit de SAML) - ID
idpId:
de l'élément IdP reçu dans la réponse de l'étape 1 appName:
nom de l'application à laquelle le client souhaite accéder- ID client
clientID:
de l'application à laquelle le navigateur tente d'accéder - Paramètre
authorization:
requis pour le fournisseur d'identités sécurisé
Exemple de code POST de formulaire HTML pour sélectionner un IdP externe
var addParamValues = function(myform, value, paramName) {
if (value !== null && value !== 'undefined') {
param = document.createElement("input");
param.value = value;
param.name = paramName;
myform.appendChild(param);
}
};
var chooseRemoteIDP = function(name, idpId, type) {
var myform = document.createElement("form");
myform.action = GlobalConfig.idcsBaseURL + "/sso/v1/sdk/secure/idp";
myform.method = "post";
<%
Credentials creds = CredentialsList.getCredentials().get(attr);
String clientId = creds.getId();
%>
var clientId = '<%=clientId%>';
addParamValues(myform, name, "idpName");
addParamValues(myform, type, "idpType");
addParamValues(myform, idpId, "idpId");
addParamValues(myform, clientId, "clientId");
addParamValues(myform, authorization, "accesstoken")
addParamValues(myform, GlobalConfig.requestState, "requestState");
document.body.appendChild(myform);
myform.submit();
};
var activateIdp = function(name, idpId) {
chooseRemoteIDP(name, idpId, "SAML");
};
var activateSocialIdp = function(name, idpId) {
chooseRemoteIDP(name, idpId, "SOCIAL");
};
Exemple de demande
Voici un exemple du contenu de l'autotest FORM POST vers l'adresse /sso/v1/sdk/secure/idp
:
requestState=value&idpName=value&idpType=SAML&idpId=value&appName=name&clientID=value&authorization=accesstoken
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format HTTP standard :
HTTP/1.1 302 See Other
Date: Tue, 30 Oct 2018 04:40:05 GMT
Content-Length: 0
Connection: keep-alive
Pragma: no-cache
Location: https://<domainURL>/idp/sso (Example URL)
Set-cookie: ORA_OCIS_REQ_1=+fxgW2P7bgQayiki5P;Version=1;Path=/;Secure;HttpOnly
Expires: Sat, 01 Jan 2000 00:00:00 GMT
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Les domaines d'identité traitent la demande et redirigent le navigateur vers le fichier IdP externe sélectionné pour authentification et autorisation. Lorsque le fichier IdP externe est terminé, il redirige le navigateur vers les domaines d'identité, puis le redirige vers le navigateur pour commencer la vérification en 2 étapes.
Etape 3 : Authentification à l'aide du facteur préféré (SMS)
Les étapes initiales pour commencer la vérification en 2 étapes sont similaires à l'étape 1. Les domaines d'identité créent et soumettent un formulaire HTML contenant les paramètres loginCtx
et signature
cryptés. Reportez-vous à l'étape 1 pour obtenir des informations détaillées sur le formulaire POST et sur la façon de le déchiffrer.
Une fois le paramètre loginCtx
décrypté, la réponse doit être similaire à l'exemple suivant :
{
"status": "success",
"displayName": "Joe's iPhone",
"nextAuthFactors": [
"SMS"
],
"SMS": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"getBackupFactors",
"resendCode"
],
"requestState": "QjyV3ueFrGQCO.....84gQw2UUm2V7s",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
loginCtx
contient des attributs importants :- requestState : état du processus d'authentification. Il doit être utilisé dans les POST et GET futurs pour les adresses d'API d'authentification des domaines d'identité.
- nextOp : opération suivante que l'application de connexion personnalisée doit effectuer.
- nextAuthFactors : facteurs d'authentification possibles que la page de connexion doit présenter.
Les valeurs de ces attributs définissent le facteur d'authentification (dans cet exemple, il s'agit de SMS) à présenter sur la page de connexion. L'utilisateur saisit le code secret à usage unique qu'il reçoit sur son appareil.
op:
indique au serveur le type d'opération souhaité par le client.otpCode:
le code envoyé à l'appareil de l'utilisateurrequestState:
reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant présente le contenu de la demande POST au format JSON pour terminer l'authentification à l'aide de la méthode préférée :
{
"op":"credSubmit",
"credentials":{
"otpCode":"108685"
},
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"authnToken": "eyJraWQiOiJT.....kLbxxL97U_0Q",
"status": "success"
}
Une session doit ensuite être créée. Une fois la session créée, le navigateur est redirigé vers l'URL initialement demandée. Reportez-vous à la section Creating a Session.
Création d'une session
Ce cas d'utilisation fournit un exemple d'utilisation des domaines d'identité pour créer une session après l'authentification, par exemple après l'authentification à l'aide de l'authentification à plusieurs facteurs.
Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Pour plus d'informations sur l'utilisation de l'API Authentifier, reportez-vous aux autres cas d'emploi dans Utilisation de l'API Authentifier.
Soumettez authnToken
et requestState
en tant que FORM POST lorsque le client a terminé l'authentification et l'authentification à plusieurs facteurs et qu'il doit créer une session. Pour cette étape, createSession
doit être répertorié en tant que valeur d'attribut nextOp
dans la dernière réponse reçue et FORM POST doit inclure l'un des attributs suivants.
/sso/v1/sdk/secure/session
:requestState:
reçu dans la dernière réponseOu
authnToken:
reçu dans la dernière réponseAND
- Paramètre
authorization:
requis pour la session sécurisée
Exemple de demande
Voici un exemple du contenu de l'autotest FORM POST vers l'adresse /sso/v1/sdk/secure/session
:
requestState=value&authorization=<client sign-in access token>
authnToken=<value received from a previous response>&authorization=<client sign-in access token>
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format HTTP standard :
HTTP/1.1 302 See Other
Date: Tue, 30 Oct 2018 04:40:05 GMT
Content-Length: 0
Connection: keep-alive
Pragma: no-cache
Location: https://<domainURL>/idp/sso (Example URL)
Set-cookie: ORA_OCIS_REQ_1=+fxgW2P7bgQayiki5P;Version=1;Path=/;Secure;HttpOnly
Expires: Sat, 01 Jan 2000 00:00:00 GMT
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Si createSession
n'est pas répertorié en tant que valeur pour le paramètre nextOp
dans la dernière réponse reçue, vous devrez peut-être créer un jeton avant de créer une session. Si createSession
est répertorié en tant que valeur pour nextOp
, l'adresse sdk/session
peut être appelée directement à l'aide de requestState
uniquement.
Exemple de demande
L'exemple suivant montre la demande de jeton à l'adresse /sso/v1/sdk/authenticate
au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"authnToken":"eyJraWQiOiJ....4IacnWKSQ",
"status":"success"
}
Le serveur vérifie qu'aucune autre évaluation de facteur n'est nécessaire. Si aucune autre évaluation n'est requise, le jeton est envoyé dans la réponse.
Authentification avec nom utilisateur et mot de passe
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API Authentifier les domaines d'identité pour l'authentification avec les informations d'identification d'un utilisateur.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Utilisez les étapes suivantes pour le cas d'emploi.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp
indique ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
doit être envoyé à l'étape suivante. Le fichier requestState
contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : Soumettre les informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
Nom utilisateur et mot de passe
credentials:
-
requestState:
reçu dans la réponse de l'étape 1 -
op:
indique au serveur le type d'opération souhaité par le client.
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"authnToken": "eyJraWQiOiJT.....UKofudtemmJE",
"status": "success"
}
Exemple de réponse d'erreur
L'exemple suivant montre le contenu de la réponse au format JSON lorsque le nom utilisateur ou le mot de passe fourni n'est pas valide :
{
"status": "failed",
"cause": [
{
"message": "You entered an incorrect username or password.",
"code": "AUTH-3001"
}
],
"requestState": "e5kwGYx57taQ.....jyg3nEDFya"
}
Authentification du nom d'utilisateur et du mot de passe avec consentement PT
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API Authentifier les domaines d'identité pour s'authentifier avec les informations d'identification d'un utilisateur avec le consentement PT. Lorsque l'utilisateur accepte le consentement, il est redirigé vers cette page d'application.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp
indique ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
doit être envoyé à l'étape suivante. Le fichier requestState
contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : Soumettre les informations d'identification de l'utilisateur sans authentification à plusieurs facteurs
Nom utilisateur et mot de passe
credentials:
requestState:
reçu dans la réponse de l'étape 1op:
indique au serveur le type d'opération souhaité par le client.
Si le nom utilisateur et les mots de passe sont valides, le serveur répond avec l'instruction PT dans l'environnement local spécifié dans le profil de l'utilisateur. Le serveur invite également l'utilisateur à fournir ses informations d'identification de consentement dans la demande suivante. Si l'instruction PT n'est pas présente dans l'environnement local de l'utilisateur fr
, la réponse 401 avec le message d'erreur AUTH-3036 : Déclaration des conditions d'utilisation pour l'environnement local fr n'est pas ajoutée s'affiche.
Exemple de demande
L'exemple suivant présente le contenu de la demande POST au format JSON vers l'adresse /sso/v1/sdk/authenticate
:
{
"op":"credSubmit",
"credentials":{
"username":"{{username}}",
"password":"{{password}}"
},
"requestState":"{{requestState}}"
}
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON lors de l'ajout des paramètres régionaux de l'utilisateur :
{
"nextOp": [
"acceptTOU"
],
"TOU": {
"statement": "This is a placeholder text. Customers must provide the actual Terms of Use.",
"credentials": [
"consent"
],
"locale": "en"
},
"requestState": "q/tRS4BFAdaimSBhq"
}
}
Exemple de réponse d'erreur
L'exemple suivant montre le contenu de la réponse au format JSON lorsque la PT pour les paramètres régionaux de l'utilisateur n'est pas ajoutée :
{
"status": "failed",
"ecId": "Q0ApB1Y1000000000",
"cause": [
{
"message": "Terms of Use Statement for locale fr isn't added.",
"code": "AUTH-3036"
}
]
}
}
Etape 3 : Fournir le consentement PT
Dans ce scénario, l'utilisateur accepte ou rejette les conditions d'utilisation de l'application. Si l'utilisateur accepte les conditions d'utilisation, il est redirigé vers la page de l'application.
Si l'utilisateur rejette les conditions d'utilisation, la réponse 401 avec un message d'erreur, AUTH-3035 : Vous devez accepter les conditions d'utilisation pour accéder à cette application, s'affiche.
Exemple de demande
L'exemple suivant montre le contenu de la demande au format JSON lorsque l'utilisateur accepte la PT.
{
"op": "acceptTOU",
"credentials": {
"consent": true
},
"requestState": "{{requestState}}"
}
Exemple de demande
L'exemple suivant montre le contenu de la demande au format JSON lorsque l'utilisateur rejette la PT.
{
"op": "acceptTOU",
"credentials": {
"consent": false
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON lorsque l'utilisateur accepte l'instruction PT.
{
"authnToken": "eyJ4NXQjUzI1NiI6Iks0R0hvZVdoUm...YUAvuEOrERXrQRnjybdOkA2Q",
"status": "success",
"ecId": "Q0ApB1Y1000000000"
}
Exemple de réponse d'erreur
La section suivante présente le contenu de la réponse au format JSON lorsque la PT est rejetée par l'utilisateur.
{
"status": "failed",
"ecId": "Q0ApB1Y1000000000",
"cause": [
{
"message": "You must accept the Terms of Use to access this application.",
"code": "AUTH-3035"
}
]
}
Authentification à l'aide du nom utilisateur, du mot de passe et de l'authentification à plusieurs facteurs, et renvoi d'un mot de passe à usage unique
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour s'authentifier avec les informations d'identification d'un utilisateur et l'authentification multifacteur (MFA) et pour renvoyer un mot de passe à usage unique crypté dans la réponse.
Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité. Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Les domaines d'identité peuvent être configurés pour envoyer un code secret à usage unique basé sur le temps (OTP) directement à un utilisateur pour authentification ou pour que le code secret soit crypté et envoyé au client consommateur qui peut ensuite l'envoyer à l'utilisateur pour authentification.
Par exemple, les administrateurs peuvent configurer des domaines d'identité pour envoyer des codes de passe à usage unique basés sur le temps (OTP) à l'application Oracle Mobile Authenticator (OMA) ou envoyer les codes de passe à usage unique par courriel à l'adresse électronique principale de l'utilisateur. Dans les deux cas, les domaines d'identité génèrent le mot de passe à usage unique, l'envoient directement à l'utilisateur et celui-ci saisit le code pour l'authentification. Pour savoir comment définir ces options à l'aide de REST, reportez-vous à Inscription à un facteur d'authentification avec vérification de facteur - SMS et à Inscription à un facteur d'authentification avec vérification de facteur - Courriel.
-
Etape 1 : créer une application CustomUI
-
Etape 2 : génération d'une paire de clés pour un certificat auto-signé
-
Etape 3 : configuration de l'application pour renvoyer le mot de passe à usage unique dans la réponse
-
Etape 4 : Demander le mot de passe à usage unique
Ces étapes supposent que l'authentification à plusieurs facteurs est activée et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.
Cryptage et décryptage
Cette implémentation utilise la spécification suivante pour crypter et décrypter le code de mot de passe à usage unique reçu. Reportez-vous à la section PKCS #1 : RSA Cryptography Specifications, Version 2.0, section 7.1 RSAES-OAEP.
Code de décryptage de mot de passe à usage unique
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package decryption;
import java.security.Key;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.cert.CertificateFactory;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
/**
*
* @author <author>
*/
public class DecryptOtpCode {
private static Key getPrivateKey(String privateKeyPEM) throws Exception {
byte[] encoded = Base64.getDecoder().decode(privateKeyPEM);
KeyFactory kf = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
return kf.generatePrivate(keySpec);
}
public static void main(String args[]) {
String value = "<encrypted_value>";
String privatekey =
"<pem_privatekey_data>";
try {
Cipher cipherInstance =
Cipher.getInstance("RSA/ECB/OAEPwithSHA1andMGF1Padding");
CertificateFactory factory = CertificateFactory.getInstance("X.509");
byte [] decoded = Base64.getDecoder().decode(value);
PrivateKey pKey = (PrivateKey)getPrivateKey(privatekey);
cipherInstance.init(Cipher.DECRYPT_MODE, pKey);
byte[] decrypted = cipherInstance.doFinal(decoded);
System.out.println("Decrypted text is " + new String(decrypted));
} catch (Exception e) {
//Unable to encrypt the content. Default to send the otp to user
//no error or exception thrown.
e.printStackTrace();
}
}
}
Etape 1 : créer une application CustomUI
Pour plus d'informations sur les applications personnalisées, reportez-vous à Ajouter des applications.
Etape 2 : génération d'une paire de clés pour un certificat auto-signé
- Assurez-vous que le fichier de configuration
otp-client.conf
contient les informations suivantes. Ensuite, générez une paire de clés privée/publique.[ req ] encrypt_key = no default_bits = 2048 default_md = sha256 utf8 = yes string_mask = utf8only prompt = no distinguished_name = user_dn [ user_dn ] 0.organizationName = "Oracle" organizationalUnitName = "OCI" commonName = "OtpClient"
-
Utilisez la commande suivante pour générer un certificat auto-signé.
#generate self signed client certificate openssl genrsa -out OtpClient.key 2048 openssl req -new -x509 -days 10000 -key OtpClient.key -out OtpClient.crt -subj "/CN=Root CA/C=IN/ST=KarnatakaCalifornia/L=Bangalore/O=Oracle" -config otp-client.conf openssl pkcs8 -topk8 -inform PEM -in OtpClient.key -out OtpClientX509Format.key -nocrypt
Etape 3 : configuration de l'application pour renvoyer le mot de passe à usage unique dans la réponse
- Dans la console Identity Cloud Service, développez le volet de navigation, cliquez sur Applications, CustomUI application, Configuration, puis sur Configuration client.
- Importez le certificat auto-signé dans le certificat de client sécurisé et enregistrez la configuration.
Etape 4 : Demander le mot de passe à usage unique
Attribut | Valeurs prises en charge / exemples de valeur | Valeurs multiples | Détails d'utilisation |
---|---|---|---|
userFlowControlledByExternalClient
|
True / False | False |
Définir cette option sur
et le mot de passe à usage unique sera renvoyé dans la réponse dans le format crypté spécifié. Remarque : le certificat utilisé pour le cryptage est téléchargé vers l'application à l'avance et est référencé à l'aide de l'attribut |
x5t | Chaîne / X509 Empreinte numérique du certificat SHA-1 |
Lorsque cette option est indiquée, le service utilise ce certificat téléchargé pour crypter les données de mot de passe à usage unique. Remarque : l'attribut "x5t" doit correspondre au certificat chargé. |
{
"op": "credSubmit",
"credentials": {
"username": "test.user",
"password": "example-password"
},
"userFlowControlledByExternalClient": true,
"x5t": "<certificate thumbprint>",
"requestState": "{{requestState}}"
}
Attribut | Valeurs prises en charge / exemples de valeur | Valeurs multiples | Détails d'utilisation |
---|---|---|---|
otp
|
Correspondance
|
False |
Lorsqu'il est présent dans la réponse, l'attribut contient le mot de passe à usage unique crypté avec les détails suivants.
|
Exemple de réponse
{
"otp": {
"value": "IMsNO+rqNCw==",
"alg": "RSAES-OAEP",
"x5t": "<certificate thumbprint>"
},
"status": "success",
"ecId": "Ft^OD161000000000",
"displayName": "+91XXXXXXXX013",
"nextAuthFactors": [
"SMS"
],
"SMS": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"getBackupFactors",
"resendCode"
],
"scenario": "AUTHENTICATION",
"requestState": "FrrACc",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Génération d'un jeton d'accès à l'aide de l'API d'authentification
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation des domaines d'identité pour générer un jeton d'accès à l'aide de l'API d'authentification. L'utilisateur obtient les informations utilisateur via le jeton d'accès Moi à l'aide de l'API d'authentification.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Lorsque l'utilisateur tente d'accéder à une application associée à une PT, le serveur de domaines d'identité utilise le nom de l'application pour extraire la stratégie affectée à cette application. En fonction des paramètres du locataire, le serveur obtient le fournisseur d'identités et la stratégie d'authentification, puis guide l'utilisateur vers l'étape suivante.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp
indique ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
doit être envoyé à l'étape suivante. Le fichier requestState
contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : Soumettre les informations d'identification de l'utilisateur
authnToken
. Les éléments suivants doivent être inclus dans la demande :Nom utilisateur et mot de passe
credentials:
requestState:
reçu dans la réponse de l'étape 1op:
indique au serveur le type d'opération souhaité par le client.
AuthnToken
est le fichier id_token au format JWT qui représente les informations utilisateur, la session et les données de demande en cours. Permet de créer un cookie de session SSO et de rediriger vers l'URL cible. Si le nom utilisateur et le mot de passe sont valides, AuthnToken
est extrait.
Exemple de demande
L'exemple suivant présente le contenu de la demande POST au format JSON vers l'adresse /sso/v1/sdk/authenticate
:
{
"op":"credSubmit",
"credentials":{
"username":"admin@oracle.com",
"password":"example-password"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant présente le contenu de la réponse au format JSON où AuthnToken
est extrait :
{
"authnToken": "eyJ4NXQjUzI1NiI6Iks0R0hvZ...ZLjOZmKAvORB8OaV1Xqt1GL3tx1kyWA",
"status": "success",
"ecId": "5fR1O171000000000"
}
Etape 3 : génération d'un jeton d'accès
Une fois que vous avez extrait un élément AuthnToken
, il est utilisé pour obtenir le jeton d'accès à partir du serveur OAuth.
Exemple de demande
L'exemple suivant illustre le contenu de la demande au format JSON :
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&scope=urn:opc:idm:__myscopes__&assertion={{authnToken}}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"access_token": "<redacted>",
"token_type": "Bearer",
"expires_in": 7600
}
Etape 4 : Obtenir les informations utilisateur
L'utilisateur soumet le jeton d'accès pour obtenir ses informations telles que le nom d'utilisateur, le nom d'affichage, l'ID d'e-mail, etc.
Exemple de demande
L'exemple suivant illustre le contenu de la demande au format JSON.
{{HOST}}/admin/v1/Me
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON avec des informations utilisateur.
{
"idcsCreatedBy": {
"type": "App",
"display": "idcssm",
"value": "4ba14c4be74d48d497da6ce651209a06",
"$ref": "https://docteam.identity.internal.oracle.com:8943/admin/v1/Apps/4ba14c4be74d48d497da6ce651209a06"
},
"id": "de94e8399a0e4f23ac52fc681f5fb828",
"meta": {
"created": "2022-12-12T09:46:53.646Z",
"lastModified": "2022-12-13T10:35:32.604Z",
"resourceType": "Me",
"location": "https://docteam.identity.internal.oracle.com:8943/admin/v1/Me/de94e8399a0e4f23ac52fc681f5fb828"
},
"active": true,
"displayName": "admin opc",
"idcsLastModifiedBy": {
"value": "6567bac90beb4e65a2eb3b280b2f0d1f",
"display": "idcssso",
"type": "App",
"$ref": "https://docteam.identity.internal.oracle.com:8943/admin/v1/Apps/6567bac90beb4e65a2eb3b280b2f0d1f"
},
"nickName": "TAS_TENANT_ADMIN_USER",
"userName": "admin@oracle.com",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false
},
"emails": [
{
"verified": false,
"primary": false,
"secondary": false,
"value": "admin@oracle.com",
"type": "recovery"
},
{
"verified": false,
"primary": true,
"secondary": false,
"value": "admin@oracle.com",
"type": "work"
}
],
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"name": {
"formatted": "admin opc",
"familyName": "opc",
"givenName": "admin"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User"
]
}
Authentification à l'aide du nom utilisateur, du mot de passe et de l'authentification à plusieurs facteurs
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API REST des domaines d'identité pour l'authentification à l'aide des informations d'identification d'un utilisateur et de l'authentification multifacteur (MFA).
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Pour ce cas d'utilisation, procédez comme suit :
Ces étapes supposent que l'authentification à plusieurs facteurs est activée et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp
indique ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
doit être envoyé à l'étape suivante. Le fichier requestState
contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : Soumettre les informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
Nom utilisateur et mot de passe
credentials:
-
requestState:
reçu dans la réponse de l'étape 1 -
op:
indique au serveur le type d'opération souhaité par le client.
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON car PUSH Notifications est le facteur préféré :
{
"status": "pending",
"displayName": "Joe's iPhone",
"nextAuthFactors": [
"PUSH"
],
"cause": [
{
"code": "AUTH-1108",
"message": "Push Notification approval is pending."
}
],
"nextOp": [
"credSubmit",
"getBackupFactors"
],
"requestState": "rATagRibc//b.....xrKh7fJtIuWo",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Si le paramètre Appareil sécurisé est désactivé au niveau du locataire, l'attribut {{trustedDeviceSettings}}
n'est pas renvoyé dans la réponse.
{{trustedDeviceSettings}}
est renvoyé, mais la valeur {{trustDurationInDays}}
est renvoyée en tant que 0
."trustedDeviceSettings": {
"trustDurationInDays": 0
}
Dans la réponse, le statut est pending
car l'utilisateur doit autoriser ou refuser la notification PUSH sur son appareil. Les valeurs nextOp
de la réponse indiquent ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
est envoyé à l'étape suivante.
Etape 3 : Authentification à l'aide du facteur préféré
Authentifiez-vous à l'aide du facteur préféré, qui dans cet exemple de cas d'emploi est Notifications PUSH. Le client doit inclure les attributs suivants dans cette demande :
-
op:
indique au serveur le type d'opération souhaité par le client. -
requestState:
reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant présente le contenu de la demande POST au format JSON pour terminer l'authentification à l'aide de la méthode préférée :
{
"op":"credSubmit",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"authnToken": "eyJraWQiOiJT.....kLbxxL97U_0Q",
"status": "success"
}
Authentification à l'aide du nom utilisateur et du mot de passe, et inscription à l'authentification à plusieurs facteurs
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API d'authentification des domaines d'identité pour l'authentification avec les informations d'identification d'un utilisateur, puis pour l'inscription à l'authentification multifacteur (MFA).
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
-
Etape 2 : Soumettre les informations d'identification de l'utilisateur
-
Etape 3 : Lancer l'inscription à l'authentification du deuxième facteur
-
Etape 4 : Soumettre les informations d'identification de facteur
Ces étapes supposent que l'authentification à plusieurs facteurs est activée et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp
indique ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
doit être envoyé à l'étape suivante. Le fichier requestState
contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : Soumettre les informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
Nom utilisateur et mot de passe
credentials:
-
requestState:
reçu dans la réponse de l'étape 1 -
op:
indique au serveur le type d'opération souhaité par le client.
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"nextAuthFactors": [
"TOTP",
"SMS",
"EMAIL",
"SECURITY_QUESTIONS"
],
"TOTP": {
"credentials": [
"offlineTotp"
]
},
"SMS": {
"credentials": [
"phoneNumber"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"requestState": "m3oIaGVOlHwA...../Fi+1RpmKmd4"
}
Dans cet exemple de cas d'emploi, étant donné que l'authentification à plusieurs facteurs est définie comme facultative dans la stratégie de connexion (indiquée par la valeur false
pour l'attribut enrollmentRequired
), l'utilisateur a le choix entre s'inscrire ou ignorer l'inscription. Si l'authentification à plusieurs facteurs est requise, la seule valeur nextOp
serait enrollment.
Dans cet exemple de cas d'emploi, enrollment
est envoyé à l'étape suivante pour lancer l'inscription du facteur d'authentification à plusieurs facteurs pour l'utilisateur. Notez que BYPASSCODE est manquant en tant que valeur nextAuthFactors
car l'utilisateur ne peut pas s'inscrire à l'aide d'un code de contournement. Le code de contournement doit être généré par l'utilisateur à l'aide de Mon profil ou en demandant à un administrateur d'en générer un pour lui.
Etape 3 : Lancer l'inscription à l'authentification du deuxième facteur
-
op:
indique au serveur le type d'opération souhaité par le client. -
authFactor:
définit le facteur d'authentification auquel l'utilisateur souhaite s'inscrire. -
requestState:
reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op":"enrollment",
"authFactor":"TOTP",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"displayName": "Joe's Phone",
"TOTP": {
"credentials": [
"otpCode"
],
"qrCode": {
"content": "oraclemobileauthenticator://totp/user?issuer=example1&Period=30&algorithm=SHA1&digits=6&RSA=SHA256withRSA&Deviceid=22f38324e67f4e2bb8e9e24583924a31&RequestId=9b428c1a-abb3-40ee-bd24-5064a87b638e&LoginURL=https%3A%2F%2Fexampletenant.com%3A8943%2Fsso%2Fv1%2F&OTP=eyJraWQiOiJTSUdOSU5HX0tFWSIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJkZXZpY2VfaWQiOiIyMmYzODMyNGU2N2Y0ZTJiYjhlOWUyNDU4MzkyNGEzMSIsImlzcyI6IkF1dGhTcnYiLCJleHAiOjE1MjcxODEwODEsImlhdCI6MTUyNzE4MDc4MSwidGVuYW50IjoidGVuYW50MSJ9.Of0Hv5H3aRpDqdsiFLO0YkK2gbzq78k3jaJFwoWwR5LKOEH-9qTt1zjSiXujPD1T__8fEZDi8iKDyxXtL5zjAlEKd5wI026JjekG58ROPjW8gADWcMrTGQ4Lgw4Q0UPjk8Fm8AloQ1vS6xpDre6S-Vv620z28EKWZK_yGhUVSfAJVzSUxaypLtQhOQJBCNAzCElUgqyav7Vpi2z5eVQBQRtXv-Z_sTgrFXaVmVU3uSNVcg6zVX2x0fMQFgeO5lyC3U2Yy9JgA7iMfAMpuNvBzW0GjyByPAYRVnHSLPuHL1qiNx9ygpoVEcFLQJcOPuDLW2bW9ZwbUcVdS0F4L_2NfA&ServiceType=TOTP&KeyPairLength=2048&SSE=Base32",
"imageType": "image/png",
"imageData": "iVBORw0KG.......5ErkJggg=="
}
},
"nextOp": [
"credSubmit",
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"requestState": "8A317/A1JiQe.....ce5/paoVOWw"
}
nextOp
indiquent ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
est envoyé à l'étape suivante.La valeur de
content
commence toujours par oraclemobileauthenticator//.
Etape 4 : Soumettre les informations d'identification de facteur
requestState
qui ont été reçues dans la réponse de l'étape 3. La charge utile de demande ne contient pas l'attribut authFactor
car requestState
le contient. Le client doit inclure les attributs suivants :op:
indique au serveur le type d'opération souhaité par le client.requestState:
reçu dans la réponse de l'étape 3
Exemple de demande
L'exemple suivant présente le contenu de la demande POST au format JSON pour soumettre les informations d'identification de facteur :
{
"op":"credSubmit",
"requestState":"{{requestState}}"
}
Exemple de réponse
Le statut success
apparaît dans la réponse lorsque l'application OMA vers le canal arrière du serveur est terminée et que la vérification optCode
a réussi. L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"displayName": "Joe's iPhone",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "eyZa+10USFR7.....6I2vnfK82hnQ"
}
Dans la réponse, les valeurs nextOp
indiquent ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, createToken
est envoyé à l'étape suivante.
Exemple de réponse en attente
Le statut pending
apparaît lorsque la communication entre l'application OMA et le canal arrière du serveur n'est pas terminée. Le client continue à interroger toutes les 10 secondes et continue à interroger pendant deux minutes. Au bout de deux minutes, le serveur envoie le statut d'échec si la vérification otpCode
échoue.
{
"status": "pending",
"cause": [
{
"code": "AUTH-1109",
"message": "Enrollment in the One-Time Passcode authentication method is pending verification."
}
],
"nextOp": [
"credSubmit",
"createToken",
"createSession",
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": false
},
"requestState": "1bYZJeyi6bcp..........74RXYKmbdiZfVW8y7tNc"
}
Etape 5 : création du jeton d'authentification
Cette étape indique que le client est terminé avec tous les éléments authnFactors
et qu'une session doit être créée. Le serveur vérifie qu'aucune autre évaluation de facteur (selon ce qui est défini pour la stratégie) n'est nécessaire et répond avec le jeton ou refuse l'accès. Le client doit inclure les attributs suivants :
-
op:
indique au serveur le type d'opération souhaité par le client. -
requestState:
reçu dans la réponse de l'étape 4
Exemple de demande
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"authnToken": "{{authnToken}}",
"status": "success"
}
Authentification du nom d'utilisateur et du mot de passe et inscription à la récupération de compte
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API d'authentification des domaines d'identité pour l'authentification avec les informations d'identification d'un utilisateur, puis pour l'inscription à la récupération de compte.
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
Ces étapes supposent que plusieurs facteurs sont activés pour la récupération de compte, mais que l'inscription à l'authentification à plusieurs facteurs n'est pas configurée. Reportez-vous à Configuration de la récupération de compte et à Configuration des paramètres d'authentification à plusieurs facteurs.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp
indique ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
doit être envoyé à l'étape suivante. Le fichier requestState
contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : Soumettre les informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
Nom utilisateur et mot de passe
credentials:
-
requestState:
reçu dans la réponse de l'étape 1 -
op:
indique au serveur le type d'opération souhaité par le client.
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "R^iCq18G000000000",
"accRecEnrollmentRequired": true,
"nextAuthFactors": [
"SMS",
"SECURITY_QUESTIONS",
"EMAIL"
],
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"EMAIL": {
"userAllowedToSetRecoveryEmail": "true",
"primaryEmailVerified": "true",
"primaryEmail": "clarence.saladna@example.com",
"credentials": [
"recoveryEmail"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "IjhvZPILfadhlnih+4uTJ83CHf....0SDELTO0mTRqC+nNU"
}
Dans cet exemple de cas d'emploi, l'utilisateur doit s'inscrire à la récupération de compte (indiquée par la valeur true
pour l'attribut accRecEnrollmentRequired:true
). nextAuthFactors
indique les facteurs auxquels l'utilisateur peut s'inscrire pour la récupération de compte.
Dans cet exemple de cas d'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription à la récupération de compte pour l'utilisateur.
Etape 3 : Lancer l'inscription à la récupération de compte
Cette étape lance l'inscription à SMS. Le client doit inclure les attributs suivants :
op
: indique au serveur le type d'opération souhaité par le client.authFactor
: définit le facteur d'authentification auquel l'utilisateur souhaite s'inscrire.phoneNumber
: définit le numéro de téléphone où le texte SMS sera envoyécountryCode
: définit le code pays du numéro de téléphone où le texte SMS sera envoyérequestState
: reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op":"enrollment",
"authFactor":"SMS",
"credentials":{
"phoneNumber":"1122334455",
"countryCode":"+44"
},
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la demande au format JSON :
{
"status": "success",
"ecId": "R^iCq19G000000000",
"displayName": "+44XXXXXXXX455",
"SMS": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"resendCode",
"enrollment"
],
"requestState": "Y4sMHf7izgxcspF6zr...Y3GXLjjudeRMM2ZNty4E"
}
Dans la réponse, les valeurs nextOp
indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
est envoyé à l'étape suivante. L'élément otpCode
est envoyé via SMS à l'appareil de l'utilisateur.
Etape 4 : Soumettre les informations d'identification de facteur
op
: indique au serveur le type d'opération souhaité par le client.requestState
: reçu dans la réponse de l'étape 3
Exemple de demande
L'exemple suivant présente le contenu de la demande POST au format JSON pour soumettre les informations d'identification de facteur :
{
"op":"credSubmit",
"credentials":{
"otpCode":"974311"
},
"requestState":"{{requestState}}"
}
Exemple de réponse
Le statut de réussite apparaît dans la réponse lorsque la vérification optCode réussit. L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "R^iCq1BG000000000",
"accRecEnrollmentRequired": false,
"displayName": "+44XXXXXXXX455",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "BKbGp43pwZad3zMSePWu7R47Va6myZdNY...vRVFN2FFQKIoDto"
}
Dans la réponse, la valeur accRecEnrollmentRequired
est définie sur false
car l'inscription au compte a réussi. Les valeurs nextOp
indiquent ce qui peut être envoyé en tant que valeur op
dans la demande suivante. La valeur nextOp
"enrollment" (Inscription) permet à l'utilisateur de basculer vers un autre facteur pour s'inscrire à la récupération de compte. Dans cet exemple de cas d'emploi, createToken
est envoyé à l'étape suivante.
Etape 5 : création du jeton d'authentification
op
: indique au serveur le type d'opération que le client veut requestState : reçu dans la réponse de l'étape 4requestState
: reçu dans la réponse de l'étape 4
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "R^iCq1FG000000000"
}
Authentification du nom d'utilisateur et du mot de passe, inscription à la récupération de compte et à l'authentification à plusieurs facteurs
Ce cas d'utilisation fournit un exemple étape par étape d'utilisation de l'API d'authentification des domaines d'identité pour l'authentification avec les informations d'identification d'un utilisateur, puis pour l'inscription à la récupération de compte et à l'authentification multifacteur (MFA).
- Utilisez cette API d'authentification uniquement si vous créez votre propre expérience de connexion de bout en bout en développant une application de connexion personnalisée à utiliser par les domaines d'identité.
- Cette API d'authentification ne peut pas être utilisée pour intégrer vos applications à des domaines d'identité à des fins d'accès avec connexion unique.
Téléchargez la collection d'exemples de cas d'utilisation d'authentification des domaines d'identité et le fichier de variables globales à partir du dossier idcs-authn-api-rest-clients dans le référentiel idm-samples GitHub, puis importez-les dans Postman.
- Etape 1 : lancement du flux d'authentification
- Etape 2 : Soumettre les informations d'identification de l'utilisateur
- Etape 3 : Lancer l'inscription à la récupération de compte
- Etape 4 : Soumettre les informations d'identification de facteur
- Etape 5 : création du jeton d'authentification
- Etape 6 : Définir SMS comme facteur d'authentification à plusieurs facteurs par défaut dans le chevauchement
- Etape 7 : création du jeton d'authentification
Ces étapes supposent que la récupération de compte et l'authentification à plusieurs facteurs sont activées et qu'une stratégie de connexion est créée pour l'authentification à plusieurs facteurs. Reportez-vous à Configuration de la récupération de compte et à Configuration des paramètres d'authentification à plusieurs facteurs.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Dans la réponse, la valeur nextOp
indique ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
doit être envoyé à l'étape suivante. Le fichier requestState
contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : Soumettre les informations d'identification de l'utilisateur
Soumettez les informations d'identification de l'utilisateur comme premier facteur, à savoir le nom utilisateur et le mot de passe. Pour cette étape, le client doit inclure les attributs suivants :
-
Nom utilisateur et mot de passe
credentials:
-
requestState:
reçu dans la réponse de l'étape 1 -
op:
indique au serveur le type d'opération souhaité par le client.
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "HI^kd1M0000000000",
"accRecEnrollmentRequired": true,
"nextAuthFactors": [
"SMS",
"SECURITY_QUESTIONS",
"EMAIL"
],
"SMS": {
"credentials": [
"phoneNumber",
"countryCode"
]
},
"EMAIL": {
"userAllowedToSetRecoveryEmail": "true",
"primaryEmailVerified": "true",
"primaryEmail": "clarence.saladna@example.com",
"credentials": [
"recoveryEmail"
]
},
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "wtyRQpBzFZnuGMQvLNRotKfRIlgliWNc8sxipU....41zjKQcvdzk2bmvWs"
}
Dans cet exemple de cas d'emploi, l'utilisateur doit s'inscrire à la récupération de compte (indiquée par la valeur true
pour l'attribut accRecEnrollmentRequired:true
). nextAuthFactors
indique les facteurs auxquels l'utilisateur peut s'inscrire pour la récupération de compte.
Dans cet exemple de cas d'emploi, l'inscription est envoyée à l'étape suivante pour lancer l'inscription à la récupération de compte pour l'utilisateur.
Etape 3 : Lancer l'inscription à la récupération de compte
Cette étape lance l'inscription à SMS. Le client doit inclure les attributs suivants :
op
: indique au serveur le type d'opération souhaité par le client.authFactor
: définit le facteur d'authentification auquel l'utilisateur souhaite s'inscrire.phoneNumber
: définit le numéro de téléphone où le texte SMS sera envoyécountryCode
: définit le code pays du numéro de téléphone où le texte SMS sera envoyérequestState
: reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op":"enrollment",
"authFactor":"SMS",
"credentials":{
"phoneNumber":"1122334455",
"countryCode":"+44"
},
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la demande au format JSON :
{
"status": "success",
"ecId": "HI^kd1N0000000000",
"displayName": "+44XXXXXXXX213",
"SMS": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"resendCode",
"enrollment"
],
"requestState": "FnwYT23S0qo+RHXN3Sx80D3....8CsoT3QezVbynT3LfZY3+sXN5E8OtEdM"
}
Dans la réponse, les valeurs nextOp
indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. Dans cet exemple de cas d'emploi, credSubmit
est envoyé à l'étape suivante. L'élément otpCode
est envoyé via SMS à l'appareil de l'utilisateur. Les informations d'identification indiquent à l'utilisateur quelle entrée est nécessaire pour transmettre la demande suivante.
Etape 4 : Soumettre les informations d'identification de facteur
requestState
reçues dans la réponse de l'étape 3. La charge utile de demande ne contient pas l'attribut authFactor
car requestState
le contient. Le client doit inclure les attributs suivants :op
: indique au serveur le type d'opération souhaité par le client.requestState
: reçu dans la réponse de l'étape 3
Exemple de demande
L'exemple suivant présente le contenu de la demande POST au format JSON pour soumettre les informations d'identification de facteur :
{
"op":"credSubmit",
"credentials":{
"otpCode":"974311"
},
"requestState":"{{requestState}}"
}
Exemple de réponse
Le statut de réussite apparaît dans la réponse lorsque la vérification optCode
réussit. L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "HI^kd1P0000000000",
"accRecEnrollmentRequired": false,
"displayName": "+44XXXXXXXX455",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "Z+ysro8gFyPPT5bI9C/RykLfRrq5rBXCOO68/wZcgkllw765qd7SNvhRN6ZHp0Xiw2FIN9nOeio7SpsEAlYxO2xQ/1fF5lAjo0jwJEzIgSRt8xj/vAQeSLhX+PRm2a1rRYHwSa9uFcUBkNA.....KP7CPh2/yrdZF4WpbI"
}
Dans la réponse, la valeur accRecEnrollmentRequired
est définie sur false
car l'inscription au compte a réussi. Les valeurs nextOp
indiquent ce qui peut être envoyé en tant que valeur op
dans la demande suivante. La valeur nextOp
"enrollment" (Inscription) permet à l'utilisateur de basculer vers un autre facteur pour s'inscrire à la récupération de compte. Dans cet exemple de cas d'emploi, createToken
est envoyé à l'étape suivante.
Etape 5 : création du jeton d'authentification
op
: indique au serveur le type d'opération que le client souhaite que requestState reçoive dans la réponse de l'étape 4.requestState
: reçu dans la réponse de l'étape 4
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant illustre le contenu de la réponse au format JSON :
{
"status": "success",
"ecId": "HI^kd1Q0000000000",
"nextAuthFactors": [
"TOTP",
"SECURITY_QUESTIONS",
"SMS",
"EMAIL",
"PUSH"
],
"EnrolledAccountRecoveryFactorsDetails": {
"SMS": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"deviceId": "3ed9b2ed366441fb91c9277abd694348",
"displayName": "+44XXXXXXXX455"
}
]
},
"EMAIL": {
"credentials": [
"accountRecoveryFactor"
],
"enrolledDevices": [
{
"displayName": "clarence.saladna@example.com"
}
]
},
"enrolledAccRecFactorsList": [
"SMS",
"EMAIL"
]
},
"nextOp": [
"enrollment"
],
"mfaSettings": {
"enrollmentRequired": true
},
"requestState": "YN9sdSJiNtD5lOEKt33paDa9Ezs5ZZhZhF3C1BsDCuMdVVNqt1RmA3d3SppmnVOIP3uYrErQNYADHCIQLrXgmxpxReUzdcFDArlejaaph3qWctYvLQiIsBwixsHgTOfQiDkzyjN8JZiX/gqbkTEmHi1S3EtjYXuw7qCcwi...G8ZnyfTrcZtKEpaDDj7CtWF/+LIwAEQLvFaXvkOK4P4"
}
Dans la réponse, comme l'authentification à plusieurs facteurs est requise, enrollmentRequired
a la valeur true
sous mfaSettings
. Par conséquent, aucun jeton n'est émis. EnrolledAccountRecoveryFactorsDetails
affiche les facteurs de récupération de compte auxquels l'utilisateur s'est inscrit. Les valeurs nextOp
indiquent ce qui peut être envoyé en tant que valeur op
dans la demande suivante. Dans cet exemple, la valeur nextOp
"enrollment" indique que l'utilisateur doit s'inscrire à l'authentification à plusieurs facteurs.
Etape 6 : Définir SMS comme facteur d'authentification à plusieurs facteurs par défaut dans le chevauchement
Cette étape indique que le client doit s'inscrire à l'authentification à plusieurs facteurs.
Le client doit inclure les attributs suivants :
authFactor
: indique le facteur auquel s'inscrire pour l'authentification à plusieurs facteursaccountRecoveryFactor
: lorsque la valeur est définie sur Vrai, indique que l'utilisateur souhaite réutiliser le facteur de récupération de compte déjà inscrit pour l'authentification à plusieurs facteurs.
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op":"enrollment",
"authFactor": "SMS",
"credentials":{
"accountRecoveryFactor" : true
},
"requestState": "{{requestState}}"
}
Exemple de réponse
{
"status": "success",
"ecId": "HI^kd1R0000000000",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "7J6m/Z1PxXQZp4pigzt1F0CXp0kotX.....WXP2knQa16MNj5E8"
}
Dans la réponse, les valeurs nextOp
indiquent ce qui peut être envoyé en tant que valeur d'opération dans la demande suivante. La valeur nextOp
"enrollment" (Inscription) permet à l'utilisateur d'inscrire un facteur supplémentaire pour l'authentification à plusieurs facteurs. Dans cet exemple de cas d'emploi, createToken
est envoyé à l'étape suivante.
Etape 7 : création du jeton d'authentification
authnFactors
et qu'une session doit être créée. Selon ce qui est défini pour la stratégie, le serveur valide qu'aucune autre évaluation de facteur n'est nécessaire et répond avec le jeton ou refuse l'accès. Le client doit inclure les attributs suivants :op
: indique au serveur le type d'opération souhaité par le client.requestState
: reçu dans la réponse de l'étape 6
Exemple de demande
L'exemple suivant illustre le contenu de la demande POST au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "HI^kd1W0000000000"
}
Authentification avec nom d'utilisateur et mot de passe et maintien de la connexion
Activer et configurer l'option Rester connecté (KMSI) afin que les utilisateurs puissent accéder à un domaine d'identité sans avoir à se connecter plusieurs fois.
Procédez comme suit pour configurer KMSI à l'aide d'interfaces d'application de programmation.
- Etape 1 : activation du KMSI pour un domaine d'identité
- Etape 2 : lancement du flux d'authentification
- Etape 3 : Soumettre les informations d'identification de l'utilisateur avec KMSI
- Etape 4 : réémettre authnToken après l'expiration de la session
- Etape 5 : Soumettre les informations d'identification de l'utilisateur avec le flux KMSI et MFA
- Etape 6 : Réémettre authnToken après l'expiration de la session lorsqu'un facteur d'authentification à plusieurs facteurs est défini
Cette rubrique contient également les informations suivantes :
- Flux kmsiToken avec requestState
- Modifications apportées à /sso/v1/sdk/secure/session
- Signature de charge utile pour /autoriser les appels lancés
Avant de commencer
- Assurez-vous que KMSI a été activé pour votre compte cloud. Vous devez appeler une demande de service auprès du support technique Oracle pour activer KMSI. Indiquez le nom de fonctionnalité suivant dans la demande de service :
access.kmsi.support
. Voir Open a Support Request. - Reportez-vous aux sections suivantes de cette rubrique :
Etape 1 : activation du KMSI pour un domaine d'identité
- Obtenez le jeton d'accès d'administrateur de domaine d'identité pour votre compte.
- Exécutez
GET
sur l'adresse/admin/v1/KmsiSettings/KmsiSettings
. Le système renvoieKmsiSettings
. - Mettez à jour les attributs nécessaires et exécutez
PUT
sur l'adresse/admin/v1/KmsiSettings/KmsiSettings
.
tokenValidityInDays
- Saisissez le nombre de jours pendant lesquels les utilisateurs peuvent rester connectés avant de se déconnecter automatiquement.
kmsiEnabled
- Indique si KMSI est activé pour le domaine d'identité.
maxAllowedSessions
- Saisissez le nombre maximal de sessions de connexion qu'un utilisateur peut avoir.
Exemple de demande
{
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:KmsiSettings"
],
"tokenValidityInDays": 2160,
"kmsiEnabled": true,
"maxAllowedSessions": 5,
"id": "KmsiSettings"
}
Etape 2 : lancement du flux d'authentification
Obtenez le requestState
initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant illustre la demande au format cURL :
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
appName
est facultatif. appName
est le nom de l'application à laquelle le client souhaite accéder. Si un appName
est fourni, les stratégies de connexion propres à l'application sont traitées et le client doit répondre aux facteurs requis en fonction de cette stratégie.Exemple de réponse
{
"status": "success",
"ecId": "ZzK2c1^0000000000",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"password"
]
},
"keepMeSignedInEnabled": false,
"requestState": "FT7qI"
}
Notez le nouvel attribut keepMeSignedInEnabled
inclus dans la réponse. Cela indique que ce domaine d'identité et cette application prennent en charge KMSI. Si vous disposez d'une interface personnalisée, utilisez cet attribut pour afficher l'option Garder ma connexion sur la page de connexion.
Etape 3 : Soumettre les informations d'identification de l'utilisateur avec KMSI
- Opération :
POST
-
Adresse :
/sso/v1/sdk/authenticate
Notez le nouvel attribut
keepMeSignedIn
inclus dans la demande. Cet attribut indique que l'utilisateur souhaite utiliser KMSI.{
"op": "credSubmit",
"credentials": {
"username": "username",
"password": "Password"
},
"keepMeSignedIn": true,
"kmsiDeviceDisplayName": "Postman KeepMeSigned In",
"requestState": "requestState"
}
Si vous disposez d'une interface personnalisée, utilisez cet attribut pour afficher l'option KMSI, cochez le statut de la case à cocher (allumée ou désactivée) et envoyez ce paramètre pour créer la session KMSI.
Exemple de réponse
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Dans l'exemple de réponse, notez l'attribut kmsiToken
. Ce jeton peut être utilisé pour accéder à n'importe quelle application à l'avenir sans nécessiter qu'un utilisateur se reconnecte.
Etape 4 : réémettre authnToken après l'expiration de la session
-
Opération :
POST
-
Adresse :
/sso/v1/sdk/authenticate
Exemple de demande
{
"op": "credSubmit",
"authFactor": "KMSI",
"appName": "AppName",
"kmsiToken": "{{kmsiToken}}"
}
Exemple de réponse
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Notez l'opération credSubmit
avec de nouveaux éléments authFactor
, appName
et kmsiToken
envoyés dans la demande. SSO évalue la demande et renvoie authnToken
et la dernière mise à jour kmsiToken
dans la réponse. Il s'agit d'un élément kmsiToken
actualisé qui remplace le jeton existant. Vous devez inclure cette version actualisée de kmsiToken
dans la demande suivante.
Etape 5 : Soumettre les informations d'identification de l'utilisateur avec le flux KMSI et MFA
Lancez GET
sur /sso/v1/sdk/authenticate
à partir de l'Step 2 : Begin the Authentication Flow.
-
Opération :
POST
-
Adresse :
/sso/v1/sdk/authenticate
Exemple de réponse
{
"op": "credSubmit",
"credentials": {
"username": "username",
"password": "Password"
},
"keepMeSignedIn": true,
"kmsiDeviceDisplayName": "Postman KeepMeSigned In",
"requestState": "requestState"
}
Exemple de réponse
{
"status": "success",
"ecId": "L371Y0xD000000000",
"displayName": "sswXXXXX@oracle.com",
"nextAuthFactors": [
"EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE"
],
"EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"getBackupFactors",
"resendCode"
],
"scenario": "AUTHENTICATION",
"requestState": "QQwppp+-",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
Après avoir obtenu le code secret à usage unique (OTP) sur le périphérique, ajoutez le code secret à usage unique dans la demande.
Exemple de demande
{
"op": "credSubmit",
"authFactor": "EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE",
"credentials": {
"otpCode": "XXXX"
},
"requestState": "6tnX6Q4RGqe4Lq73WD0pQ"
}
La réponse inclut authToken
et kmsiToken
. Il s'agit d'un élément kmsiToken
actualisé.
Exemple de réponse
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Etape 6 : Réémettre authnToken après l'expiration de la session lorsqu'un facteur d'authentification à plusieurs facteurs est défini
Lorsqu'un utilisateur tente de se connecter à l'aide de kmsiToken
et qu'un deuxième facteur est configuré, l'utilisateur est toujours invité à s'authentifier. Ce n'est qu'après une authentification réussie que authnToken
et kmsiToken
seront envoyés dans la réponse.
-
Opération :
POST
-
Adresse :
/sso/v1/sdk/authenticate
Exemple de demande
{
"op": "credSubmit",
"authFactor": "KMSI",
"appName": "AppName",
"kmsiToken": "{{kmsiToken}}"
}
La réponse contient un jeton KMSI actualisé et une question de vérification d'authentification à plusieurs facteurs.
Exemple de réponse
{
"status": "success",
"ecId": "pccFR1eG000000000",
"displayName": "XXXXX@oracle.com",
"nextAuthFactors": [
"EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE"
],
"EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"getBackupFactors",
"resendCode"
],
"scenario": "AUTHENTICATION",
"requestState": "+Dj6hQQ7id5V2gSGHGtCROb5n",
"trustedDeviceSettings": {
"trustDurationInDays": 15
},
"kmsiToken": "fxkLne3RtKI1c"
}
Répétez le même processus où vous serez à nouveau invité à saisir le mot de passe à usage unique sur le périphérique. Fournissez la charge utile ci-dessous avec le mot de passe à usage unique. La réponse doit inclure authnToken
.
Exemple de demande
{
"op": "credSubmit",
"authFactor": "EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE",
"credentials": {
"otpCode": "XXXX"
},
"requestState": "6tnX6Q4RGqe4Lq73WD0pQ"
}
Exemple de réponse
{
"authnToken": "QpfQIQ",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Flux kmsiToken avec requestState
Utilisez ce flux pour prendre en charge le contexte du navigateur lorsque vous possédez le jeton KMSI, mais pas le cookie KMSI. Après l'expiration de la session, l'application envoie un appel d'autorisation au système d'identités avec les éléments redirectUrl
, state
, nonce
, etc. Dans la réponse, le système d'identité renvoie la valeur requestState
dans loginCtx
. Ce requestState avec le jeton KMSI est transmis pour rediriger l'application requise après l'extension de la session.
-
Opération :
POST
-
Adresse :
/sso/v1/sdk/authenticate
authFactor
et authentifie KMSI avec le paramètre requestState
. Cela permet d'extraire kmsiToken
avec requestState
à partir de loginCtx
. Si
requestState
et kmsiToken
ne proviennent pas de la même application, la demande est refusée.Exemple de demande
{
"op": "credSubmit",
"authFactor": "KMSI",
"appName": "KMSIAdmin",
"kmsiToken": "{{kmsiToken}}",
"requestState": "{{requestState}}"
}
Exemple de réponse
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Modifications apportées à /sso/v1/sdk/secure/session
KMSI requiert l'ajout d'un nouvel attribut à l'adresse /sso/v1/sdk/secure/session
. kmsiToken
doit être envoyé à l'adresse à partir de l'application de connexion personnalisée.
Exemple de demande | Exemple de réponse |
---|---|
kmsiToken |
La nouvelle variable de publication de formulaire kmsiToken avec authnToken ou requestState redirigera vers l'application avec le cookie de session SSO et le cookie KMSI. |
Signature de charge utile pour les appels lancés par /authorize
- Lorsqu'un utilisateur accède à une application Web protégée par des domaines d'identité, il saisit son URL d'application, par exemple
https://example.com/home/pages/profile
. - Le système redirige vers l'appel de domaine d'identité
/authorize
. - Le domaine d'identité redirige l'utilisateur vers la page de connexion personnalisée déployée par le client.
- L'application de connexion hébergée par le client collecte les paramètres d'entrée et décode l'entrée
loginCtx
. - Le paramètre d'entrée décrypté correspond à l'appel
GET
/sso/v1/sdk/authenticate
. - La charge utile contient
keepMeSignedInEnabled
pour déterminer si KMSI est activé. - L'application de connexion personnalisée collecte les informations d'identification et les soumet au domaine d'identité.
- Le domaine d'identité valide les informations d'identification et émet
kmsiToken
etauthnToken
. - L'application de connexion personnalisée utilise
authnToken
etkmsiToken
lors de l'appel de l'adresse/sso/v1/sdk/secure/session
. La nouvelle syntaxe de l'adresse sécurisée est décrite à la section Changes to /sso/v1/sdk/secure/session. - Le domaine d'identité valide
authnToken
,kmsiToken
, puis le système d'identité émet le cookie de session SSO et le cookie KMSI. - Pendant la session, le cookie KMSI est validé pour étendre la session sans ressaisir les informations d'identification.