Utilisation de l'API d'authentification pour développer une page de connexion personnalisée
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST de domaines d'identité pour 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 d'une machine à états. Les réponses aux demandes informent un client de l'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 du comportement de l'utilisateur final ne peuvent pas être appliqués. La valeur requestState fournie dans chaque réponse de demande est utilisée 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 aider à vérifier les informations d'identification et de connexion 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 multifacteur (MFA) en exigeant une vérification supplémentaire, telle que l'utilisation d'un code secret à usage unique basé sur le temps ou d'un code secret SMS.
- Permettre aux utilisateurs de sélectionner un fournisseur d'identités sociales ou SAML externe pour l'authentification.
Reportez-vous à la collection Postman de l'API d'authentification des domaines d'identité pour obtenir des exemples de cas d'utilisation d'authentification complets. 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és SAML externe
- Authentification d'un fournisseur d'identités SAML social
- Authentification auprès d'un fournisseur d'identités SAML externe et de l'authentification à plusieurs facteurs
- Authentification avec le nom utilisateur et le mot de passe
- Authentifier le nom d'utilisateur et le mot de passe avec le consentement PT
- Génération de jeton d'accès à l'aide de l'API d'authentification
- Authentification du nom utilisateur et du mot de passe et inscription à la récupération de compte
- Authentification du nom utilisateur et du mot de passe et inscription à la récupération de compte et à l'authentification à plusieurs facteurs
- Authentification avec nom utilisateur et mot de passe et inscription à l'authentification à plusieurs facteurs
- Authentification à l'aide du nom utilisateur et du mot de passe, et de l'authentification à plusieurs facteurs
Codes de statut d'API d'authentification à plusieurs facteurs et à la demande
Authentification auprès d'un fournisseur d'identités SAML externe
Ce cas d'emploi présente 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 d'utilisation de l'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. Le processus d'authentification commence. 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 POST de formulaire HTML 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 est 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échiffrer 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 devrait ê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 qui apparaît contient les valeurs décryptées du paramètre loginCtx ainsi que le jeton d'accès. La page de connexion inclut JavaScript qui est utilisé pour effectuer des appels AJAX vers des domaines d'identité.
Etape 2 : sélection d'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 d'étape 1- Nom
idpName:de IdP reçu dans la réponse d'étape 1 - Type
idpType:de IdP reçu dans la réponse d'étape 1 (dans cet exemple, il s'agit de SAML) - ID
idpId:de la valeur IdP reçue dans la réponse d'étape 1 - Nom
appName: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 SAML 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=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 l'élément IdP externe sélectionné pour authentification et autorisation. Une fois le fichier IdP externe 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 un POST FORMULAIRE de soumission automatique HTML vers la page de connexion personnalisée qui contient authnToken. La page de connexion personnalisée crée ensuite la session. Reportez-vous à Création d'une session.
Authentification auprès d'un fournisseur d'identités sociales
Ce cas d'utilisation présente 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 d'utilisation de l'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. Le processus d'authentification commence. 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 POST de formulaire HTML 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 est 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 devrait ê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 qui apparaît contient les valeurs décryptées du paramètre loginCtx ainsi que le jeton d'accès. La page de connexion inclut JavaScript qui est utilisé pour effectuer des appels AJAX vers des domaines d'identité.
Etape 2 : sélectionnez 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 montre 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. Une fois l'élément de réseau social IdP 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 un POST FORMULAIRE de soumission automatique HTML vers la page de connexion personnalisée qui contient authnToken. La page de connexion personnalisée crée ensuite la session. Reportez-vous à Création d'une session.
Authentification auprès d'un fournisseur d'identités SAML externe et de l'authentification à plusieurs facteurs
Ce cas d'emploi présente 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 à plusieurs facteurs (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 d'utilisation de l'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. Le processus d'authentification commence. 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 POST de formulaire HTML 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 est 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échiffrer 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 devrait ê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 qui apparaît contient les valeurs décryptées du paramètre loginCtx ainsi que le jeton d'accès. La page de connexion inclut JavaScript qui est 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 d'étape 1- Nom
idpName:de IdP reçu dans la réponse d'étape 1 - Type
idpType:de IdP reçu dans la réponse d'étape 1 (dans cet exemple, il s'agit de SAML) - ID
idpId:de la valeur IdP reçue dans la réponse d'étape 1 - Nom
appName: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 fichier 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 l'élément IdP externe sélectionné pour authentification et autorisation. Une fois l'élément IdP externe terminé, il redirige le navigateur vers des domaines d'identité, qui redirige ensuite le navigateur vers le début de la vérification en 2 étapes.
Etape 3 : Authentification à l'aide du facteur préféré (SMS)
Les étapes initiales de début de la vérification en 2 étapes sont similaires à l'étape 1. Les domaines d'identité créent et soumettent un formulaire HTML qui contient les paramètres cryptés loginCtx et signature. Reportez-vous à l'étape 1 pour obtenir des informations détaillées sur le formulaire POST et sur la façon de 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 clientotpCode:le code envoyé au périphérique de l'utilisateurrequestState:reçu dans la réponse d'étape 2
Exemple de demande
L'exemple suivant montre 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 montre le contenu de la réponse au format JSON :
{
"authnToken": "eyJraWQiOiJT.....kLbxxL97U_0Q",
"status": "success"
}
Une session doit alors être créée. Une fois la session créée, le navigateur est redirigé vers l'URL initialement demandée. Reportez-vous à Création d'une session.
Création d'une session
Ce cas d'emploi fournit un exemple d'utilisation des domaines d'identité pour créer une session après l'authentification, par exemple après 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 d'authentification, reportez-vous aux autres cas d'emploi dans Utilisation de l'API d'authentification.
Soumettez authnToken et requestState en tant que POST FORM 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 le POST FORM 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éponseET
- 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 illustre la demande de jeton vers l'adresse /sso/v1/sdk/authenticate au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre 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 le nom utilisateur et le mot de passe
Ce cas d'emploi fournit un exemple détaillé de l'utilisation de l'API d'authentification des domaines d'identité pour l'authentification à l'aide des 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 d'utilisation de l'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.
Suivez les étapes ci-dessous 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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre 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. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des 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 :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre 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 :
{
"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 d'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"
}
Authentifier le nom d'utilisateur et le mot de passe avec le consentement PT
Ce cas d'utilisation fournit un exemple étape par étape de l'utilisation de l'API d'authentification des domaines d'identité pour l'authentification 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 d'utilisation de l'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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre 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. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur sans authentification à plusieurs facteurs)
credentials:nom d'utilisateur et mots de passerequestState:reçu dans la réponse d'é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 linguistique 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 les paramètres régionaux de l'utilisateur fr, la réponse 401 avec le message d'erreur AUTH-3036 : L'instruction Conditions d'utilisation pour les paramètres régionaux 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 lorsque les paramètres régionaux de l'utilisateur sont ajoutés :
{
"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 des 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 le 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 illustre 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
Les éléments suivants indiquent 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 et du mot de passe, de l'authentification à plusieurs facteurs et renvoi d'un mot de passe à usage unique
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST des domaines d'identité pour l'authentification à l'aide des informations d'identification et de l'authentification à plusieurs facteurs d'un utilisateur 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 d'utilisation de l'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 (OTP) basé sur le temps 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 ponctuels basés sur le temps à l'application Oracle Mobile Authenticator (OMA) ou envoyer les mots de passe à l'adresse électronique principale de l'utilisateur par courriel. 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 au facteur d'authentification avec vérification de facteur - SMS et à Inscription au 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 : demande du mot de passe à usage unique
Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. Reportez-vous à Configuration des paramètres d'authentification à plusieurs facteurs.
Cryptage et déchiffrement
Cette implémentation utilise la spécification suivante pour chiffrer et déchiffrer le code OTP reçu. Reportez-vous à PKCS n° 1 : spécifications de cryptographie RSA, 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.confcontient 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" -
Pour générer un certificat autosigné, utilisez la commande suivante.
#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, sélectionnez Applications, application CustomUI, Configuration, puis Configuration client.
- Importez le certificat auto-signé dans le certificat client sécurisé et enregistrez la configuration.
Etape 4 : demande du mot de passe à usage unique
| Attribut | Valeurs prises en charge / Exemples de valeurs | Valeurs multiples | Détails de l'utilisation |
|---|---|---|---|
userFlowControlledByExternalClient
|
vrai / faux | faux |
Affectez la valeur suivante à cette option
et le mot de passe à usage unique sera renvoyé dans la réponse dans le format chiffré spécifié. Remarque : le certificat utilisé pour le cryptage est téléchargé à l'avance vers l'application et référencé à l'aide de l'attribut |
| x5t | Empreinte numérique du certificat SHA-1 de la chaîne / X509 |
Une fois spécifié, 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 téléchargé. |
{
"op": "credSubmit",
"credentials": {
"username": "test.user",
"password": "example-password"
},
"userFlowControlledByExternalClient": true,
"x5t": "<certificate thumbprint>",
"requestState": "{{requestState}}"
}
| Attribut | Valeurs prises en charge / Exemples de valeurs | Valeurs multiples | Détails de l'utilisation |
|---|---|---|---|
otp
|
Correspondance
|
faux |
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 de jeton d'accès à l'aide de l'API d'authentification
Ce cas d'emploi fournit un exemple étape par étape de l'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 d'utilisation de l'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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre 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. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des informations d'identification de l'utilisateur
authnToken. Les éléments suivants doivent être inclus dans la demande :credentials:nom d'utilisateur et mots de passerequestState:reçu dans la réponse d'é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 montre le contenu de la réponse au format JSON dans lequel l'élément 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 un jeton d'accès à partir du serveur OAuth.
Exemple de demande
L'exemple suivant montre 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 montre le contenu de la réponse au format JSON :
{
"access_token": "<redacted>",
"token_type": "Bearer",
"expires_in": 7600
}
Etape 4 : Obtention des informations utilisateur
L'utilisateur soumet le jeton d'accès pour obtenir des informations telles que le nom d'utilisateur, le nom d'affichage, l'ID d'adresse électronique, etc.
Exemple de demande
L'exemple suivant montre le contenu de la demande au format JSON.
{{HOST}}/admin/v1/Me
Exemple de réponse
L'exemple suivant montre 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 et du mot de passe, et de l'authentification à plusieurs facteurs
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API REST de domaines d'identité pour l'authentification à l'aide des informations d'identification et de l'authentification à plusieurs facteurs 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 d'utilisation de l'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'emploi, procédez comme suit :
Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. 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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre 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. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des 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 :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre 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 les notifications PUSH sont 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 Trusted Device 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 périphérique. Les valeurs nextOp dans 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 en utilisant le facteur préféré, qui dans cet exemple d'utilisation 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 d'étape 2
Exemple de demande
L'exemple suivant montre 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 montre le contenu de la réponse au format JSON :
{
"authnToken": "eyJraWQiOiJT.....kLbxxL97U_0Q",
"status": "success"
}
Authentification avec nom utilisateur et mot de passe et inscription à l'authentification à plusieurs facteurs
Ce cas d'utilisation fournit un exemple étape par étape de l'utilisation de l'API d'authentification des domaines d'identité pour s'authentifier avec les informations d'identification d'un utilisateur, puis pour s'inscrire à l'authentification multifacteur.
- 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 d'utilisation de l'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 : soumission des informations d'identification de l'utilisateur
-
Etape 3 : Lancer l'inscription à l'authentification du deuxième facteur
-
Etape 4 : Soumettre les informations d'identification du facteur
Ces étapes supposent que l'authentification multifacteur est activée et qu'une stratégie de connexion est créée pour l'authentification multifacteur. 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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre 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. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des 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 :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre 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 :
{
"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'utilisation, é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 peut choisir de s'inscrire ou d'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 d'étape 2
Exemple de demande
L'exemple suivant montre le contenu de la demande POST au format JSON :
{
"op":"enrollment",
"authFactor":"TOTP",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre 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 du facteur
requestState qui ont été reçues dans la réponse d'é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 clientrequestState:reçu dans la réponse de l'étape 3
Exemple de demande
L'exemple suivant montre 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 à la communication du canal arrière du serveur est terminée et que la vérification optCode réussit. L'exemple suivant montre 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 a 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 d'étape 4
Exemple de demande
{
"op":"createToken",
"requestState":"{{requestState}}"
}Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"authnToken": "{{authnToken}}",
"status": "success"
}
Authentification du nom utilisateur et du mot de passe et inscription à la récupération de compte
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API d'authentification des domaines d'identité pour l'authentification auprès des informations d'identification d'un utilisateur, puis 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 d'utilisation de l'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 multifacteur.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre 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. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des 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 :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre 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 :
{
"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 de récupération de compte pour l'utilisateur.
Etape 3 : Lancer l'inscription à la récupération du compte
Cette étape lance l'inscription par SMS. Le client doit inclure les attributs suivants :
op: indique au serveur le type d'opération souhaité par le clientauthFactor: 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 du SMS sera envoyécountryCode: définit l'indicatif du pays du numéro de téléphone où le SMS sera envoyérequestState: reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant montre 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 montre 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. Le message otpCode est envoyé par SMS à l'appareil de l'utilisateur.
Etape 4 : Soumettre les informations d'identification du facteur
op: indique au serveur le type d'opération souhaité par le clientrequestState: reçu dans la réponse de l'étape 3
Exemple de demande
L'exemple suivant montre 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 a réussi. L'exemple suivant montre 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 quel type d'opération le client souhaite 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 montre le contenu de la demande POST au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre le contenu de la réponse au format JSON :
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "R^iCq1FG000000000"
}
Authentification du nom utilisateur et du mot de passe et inscription à la récupération de compte et à l'authentification à plusieurs facteurs
Ce cas d'emploi fournit un exemple étape par étape de l'utilisation de l'API d'authentification des domaines d'identité pour s'authentifier avec les informations d'identification d'un utilisateur, puis pour s'inscrire à la récupération de compte et à l'authentification multifacteur.
- 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 d'utilisation de l'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 : soumission des informations d'identification de l'utilisateur
- Etape 3 : Lancer l'inscription à la récupération du compte
- Etape 4 : Soumettre les informations d'identification du facteur
- Etape 5 : création du jeton d'authentification
- Etape 6 : Définir le facteur d'authentification à plusieurs facteurs par défaut pour SMS 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 multifacteur.
Etape 1 : lancement du flux d'authentification
Obtenez le requestState initial pour démarrer le flux d'authentification.
Exemple de demande
L'exemple suivant montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur cette stratégie.Exemple de réponse
L'exemple suivant montre 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. requestState contient les données contextuelles nécessaires au traitement de la demande.
Etape 2 : soumission des 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 :
-
credentials:nom d'utilisateur et mots de passe -
requestState:reçu dans la réponse d'étape 1 -
op:indique au serveur le type d'opération souhaité par le client
Exemple de demande
L'exemple suivant montre 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 :
{
"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 de récupération de compte pour l'utilisateur.
Etape 3 : Lancer l'inscription à la récupération du compte
Cette étape lance l'inscription par SMS. Le client doit inclure les attributs suivants :
op: indique au serveur le type d'opération souhaité par le clientauthFactor: 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 du SMS sera envoyécountryCode: définit l'indicatif du pays du numéro de téléphone où le SMS sera envoyérequestState: reçu dans la réponse de l'étape 2
Exemple de demande
L'exemple suivant montre 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 montre 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. Le message otpCode est envoyé par 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 du facteur
requestState reçues dans la réponse d'é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 clientrequestState: reçu dans la réponse de l'étape 3
Exemple de demande
L'exemple suivant montre 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 a réussi. L'exemple suivant montre 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 recevoir requestState 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 montre le contenu de la demande POST au format JSON :
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Exemple de réponse
L'exemple suivant montre 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 indique 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 le facteur d'authentification à plusieurs facteurs par défaut pour SMS 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 facteurs.accountRecoveryFactor: lorsqu'elle est définie sur True, indique que l'utilisateur veut réutiliser le facteur de récupération de compte déjà inscrit pour l'authentification à plusieurs facteurs.
Exemple de demande
L'exemple suivant montre 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 vérifie 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 clientrequestState: reçu dans la réponse de l'étape 6
Exemple de demande
L'exemple suivant montre 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 connexion permanente
Activer et configurer l'option Rester connecté (KMSI) afin que les utilisateurs puissent accéder à un domaine d'identité sans avoir à se connecter à plusieurs reprises.
Procédez comme suit pour configurer KMSI à l'aide d'interfaces d'application par programmation.
- Etape 1 : activation de KMSI pour un domaine d'identité
- Etape 2 : lancement du flux d'authentification
- Etape 3 : soumission des informations d'identification de l'utilisateur avec KMSI
- Étape 4 : Réémettre authnToken après l'expiration de la session
- Etape 5 : soumission des 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 sections suivantes :
- kmsiToken Flux avec requestState
- Modifications apportées à /sso/v1/sdk/secure/session
- Signature de charge utile pour les appels lancés /autorisés
Avant de commencer
- Assurez-vous que KMSI a été activé pour votre compte cloud. Vous devez lancer 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. Reportez-vous à Demandes d'assistance. - Consultez les sections suivantes de cette rubrique :
Etape 1 : activation de KMSI pour un domaine d'identité
- Obtenez le jeton d'accès d'administrateur de domaine d'identité pour votre compte.
- Exécutez
GETsur l'adresse/admin/v1/KmsiSettings/KmsiSettings. Le système renvoie la valeurKmsiSettings. - Mettez à jour les attributs nécessaires et exécutez
PUTsur 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- Entrez le nombre maximum de sessions connectées qu'un utilisateur peut avoir.
Exemple de requête
{
"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 montre 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 une valeur appName est fournie, les stratégies de connexion propres à l'application sont traitées et le client est mis en doute pour les facteurs requis basés sur 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 Conserver ma connexion sur la page de connexion.
Etape 3 : soumission des 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 (activé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 à toutes les applications à l'avenir sans qu'un utilisateur ne se reconnecte.
Étape 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 les 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 valeur kmsiToken actualisée dans la demande suivante.
Etape 5 : soumission des informations d'identification de l'utilisateur avec le flux KMSI et MFA
Lancez GET sur /sso/v1/sdk/authenticate à l'étape 2 : lancement du flux d'authentification.
-
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 l'appareil, ajoutez le mot de passe à 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é à authentifier le deuxième facteur. Ce n'est qu'après l'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 MFA.
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"
}
kmsiToken Flux 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 effectue un appel d'autorisation vers le système d'identité avec les éléments redirectUrl, state, nonce, etc. Dans la réponse, le système d'identité renvoie requestState à l'intérieur de loginCtx. Ce jeton requestState et le jeton KMSI sont 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 exige qu'un nouvel attribut soit ajouté à 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échiffré correspond à l'appel
GET/sso/v1/sdk/authenticate. - La charge utile contient
keepMeSignedInEnabledpour identifier 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 les messages
kmsiTokenetauthnToken. - L'application de connexion personnalisée utilise
authnTokenetkmsiTokenlors de l'appel de l'adresse/sso/v1/sdk/secure/session. La nouvelle syntaxe de l'adresse sécurisée est décrite dans Modifications apportées à /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 prolonger la session sans ressaisir les informations d'identification.