Utilizzo dell'interfaccia API di autenticazione per sviluppare una pagina di accesso personalizzata
Questo caso d'uso fornisce un esempio dettagliato dell'uso dell'API REST dei domini di Identity per sviluppare una pagina di collegamento personalizzata per un dominio di Identity.
Utilizzare questa interfaccia API di autenticazione solo se si sta creando un'esperienza di login end-to-end personalizzata sviluppando un'applicazione di accesso personalizzata che deve essere utilizzata dai domini di Identity.
Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
L'API di autenticazione si basa sul concetto di computer di stato. Le risposte alle richieste informano un client dell'applicazione cosa deve essere fatto dopo piuttosto che richiedere agli utenti di abilitare i cookie di terze parti nei loro browser. I cookie di terze parti abilitati nei browser possono presentare problemi, soprattutto per le applicazioni B2C in cui i controlli sul comportamento dell'utente finale non possono essere applicati. Il valore requestState
fornito in ogni risposta alla richiesta successiva viene utilizzato nella richiesta successiva, fornendo al client le informazioni necessarie per elaborare la richiesta e quindi fornire il set successivo di operazioni consentite.
- Consente di verificare le credenziali di nome utente e password per un utente come autenticazione principale.
- Supporta la registrazione degli utenti con fattori MFA abilitati dall'amministratore
- Rafforza la sicurezza dell'autenticazione basata su password utilizzando l'autenticazione a più fattori (MFA) richiedendo ulteriori verifiche, come l'uso di un passcode monouso basato sul tempo o di un passcode SMS.
- Consente agli utenti di selezionare un SAML o un provider Social Identity esterno per l'autenticazione.
Per alcuni esempi di casi d'uso di autenticazione estesi, vedere la raccolta Postman API di autenticazione dei domini di Identity. Scaricare la raccolta e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno di GitHub, quindi importarli in Postman.
- Autenticazione di un provider di identità SAML esterno
- Autenticazione di un provider di identità Social SAML
- Autenticazione con un provider di identità SAML e un MFA esterni
- Autenticazione con nome utente e password
- Autenticazione del nome utente e della password con il consenso fascia temporale di utilizzo
- Generazione del token di accesso mediante l'API di autenticazione
- Autenticazione del nome utente e della password e iscrizione al recupero dell'account
- Autenticazione di nome utente e password e iscrizione al recupero account e all'autenticazione MFA
- Autenticazione con nome utente e password e iscrizione a MFA
- Autenticazione con nome utente, password e MFA
Autentica e su richiesta codici stato API MFA
Autenticazione con un provider di identità SAML esterno
In questo caso d'uso vengono illustrati i passi per utilizzare i domini di Identity per l'autenticazione mediante un provider di identità SAML esterno (IdP).
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Passo 1: avviare il flusso di autenticazione
Un utente apre una finestra del browser per accedere a una pagina protetta.
/authorize
. Questo avvia il processo di autenticazione. Anziché presentare la pagina di accesso predefinita, i domini di Identity rispondono creando e sottomettendo al browser un modulo HTML contenente i parametri loginCtx
e signature
.È necessario esporre un endpoint per ricevere l'invio del modulo e leggere i due valori dei parametri.
Esempio di form HTML POST
Di seguito è riportato un esempio di POST form HTML restituito dai domini di Identity per richiamare la pagina di accesso personalizzata.
<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
è cifrato con based64, l'applicazione di accesso personalizzata deve decifrare loginCtx
effettuando le operazioni riportate di seguito.- Decodificare utilizzando un decoder base64 per ottenere i dati binari cifrati
- Utilizzare il nome del tenant e generare una chiave per la decifrazione
- Decifrare i dati utilizzando i dati chiave e binari
Esempio di logica di decifrazione per loginCtx cifrato in Java
Di seguito è riportata una logica di decifrazione di esempio.
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;
}
Esempio di risposta
La risposta deve essere simile all'esempio seguente:
{
"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
contiene alcuni attributi importanti:- requestState: lo stato del processo di autenticazione. Deve essere utilizzato nei POST e nei GET futuri per gli endpoint API di autenticazione dei domini di Identity.
- nextOp: l'operazione successiva che l'applicazione di accesso personalizzata deve eseguire.
- nextAuthFactors: i possibili fattori di autenticazione che la pagina di accesso deve presentare.
I valori di questi attributi definiscono il fattore di autenticazione, i provider di identità e i provider social visualizzati nella pagina di accesso. Viene visualizzata la pagina di accesso contenente i valori decifrati del parametro loginCtx
insieme al token di accesso. La pagina Collega include JavaScript utilizzato per eseguire chiamate AJAX ai domini di Identity.
Passo 2: selezionare un provider di identità SAML
/sso/v1/sdk/idp
. Per questo passo è necessario includere i seguenti attributi:requestState:
ricevuto nella risposta del passo 1- Nome
idpName:
del IdP ricevuto nella risposta del passo 1 - Tipo
idpType:
di IdP ricevuto nella risposta del passo 1 (in questo esempio, è SAML) - ID
idpId:
del IdP ricevuto nella risposta del passo 1 - Nome
appName:
dell'applicazione a cui il client desidera accedere - ID client
clientID:
dell'applicazione a cui il browser sta tentando di accedere - Parametro
authorization:
richiesto per IDP sicuro
Codice POST form HTML di esempio per selezionare 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");
};
Esempio di richiesta
Di seguito è riportato un esempio del contenuto di FORM POST nell'endpoint /sso/v1/sdk/secure/idp
.
requestState=value&idpName=value&idpType=SAML&idpId=value&appName=name&clientID=value&authorization=accesstoken
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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
I domini di Identity elaborano la richiesta e reindirizzano il browser all'indirizzo IdP esterno selezionato per l'autenticazione e l'autorizzazione. Al termine dell'operazione IdP esterna, il browser viene reindirizzato ai domini di Identity. I domini di Identity convalidano la risposta all'asserzione e controllano se è necessaria un'autenticazione aggiuntiva, ad esempio MFA.
Se non è richiesta un'autenticazione aggiuntiva, i domini di Identity creano la sessione e reindirizzano il browser all'URL di destinazione. In alternativa, i domini di Identity creano una sottomissione automatica HTML FORM POST nella pagina di accesso personalizzata che contiene authnToken
. La pagina di accesso personalizzata crea quindi la sessione. Vedere Creazione di una sessione.
Autenticazione con un provider Social Identity
In questo caso d'uso vengono illustrati i passi per utilizzare i domini di Identity per l'autenticazione mediante un provider Social Identity (IdP), ad esempio Facebook o Google.
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Passo 1: avviare il flusso di autenticazione
Un utente apre una finestra del browser per accedere a una pagina protetta.
/authorize
. Questo avvia il processo di autenticazione. Anziché presentare la pagina di accesso predefinita, i domini di Identity rispondono creando e sottomettendo al browser un modulo HTML contenente i parametri loginCtx
e signature
.È necessario esporre un endpoint per ricevere l'invio del modulo e leggere i due valori dei parametri.
Esempio di form HTML POST
Di seguito è riportato un esempio di POST form HTML restituito dai domini di Identity per richiamare la pagina di accesso personalizzata.
<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
è cifrato con based64, l'applicazione di accesso personalizzata deve decifrare loginCtx
effettuando le operazioni riportate di seguito.Esempio di logica di decifrazione per loginCtx cifrato in Java
Di seguito è riportata una logica di decifrazione di esempio.
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;
}
Esempio di risposta
La risposta deve essere simile all'esempio seguente:
{
"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
contiene alcuni attributi importanti:I valori di questi attributi definiscono il fattore di autenticazione, i provider di identità e i provider social visualizzati nella pagina di accesso. Viene visualizzata la pagina di accesso contenente i valori decifrati del parametro loginCtx
insieme al token di accesso. La pagina Collega include JavaScript utilizzato per eseguire chiamate AJAX ai domini di Identity.
Passo 2: selezionare un provider Social Identity
/sso/v1/sdk/idp
. Per questo passo è necessario includere i seguenti attributi:Codice POST form HTML di esempio per selezionare un 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");
};
Esempio di richiesta
Di seguito è riportato un esempio del contenuto di FORM POST nell'endpoint /sso/v1/sdk/secure/idp
.
requestState=value&idpName=value&idpType=Social&idpId=value&appName=name&clientID=value&authorization=accesstoken
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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
I domini di Identity elaborano la richiesta e reindirizzano il browser al social IdP selezionato per l'autenticazione e l'autorizzazione. Al termine del social IdP, il browser viene reindirizzato ai domini di Identity. I domini di Identity convalidano la risposta all'asserzione e controllano se è necessaria un'autenticazione aggiuntiva, ad esempio MFA.
Se non è richiesta un'autenticazione aggiuntiva, i domini di Identity creano la sessione e reindirizzano il browser all'URL di destinazione. In alternativa, i domini di Identity creano una sottomissione automatica HTML FORM POST nella pagina di accesso personalizzata che contiene authnToken
. La pagina di accesso personalizzata crea quindi la sessione. Vedere Creazione di una sessione.
Autenticazione con un provider di identità SAML e un MFA esterni
In questo caso d'uso vengono illustrati i passi per utilizzare i domini di Identity per l'autenticazione mediante un provider di identità SAML esterno (IdP) e un'autenticazione con più fattori (MFA).
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Passo 1: avviare il flusso di autenticazione
Un utente apre una finestra del browser per accedere a una pagina protetta.
/authorize
. Questo avvia il processo di autenticazione. Anziché presentare la pagina di accesso predefinita, i domini di Identity rispondono creando e sottomettendo al browser un modulo HTML contenente i parametri loginCtx
e signature
.È necessario esporre un endpoint per ricevere l'invio del modulo e leggere i due valori dei parametri.
Esempio di form HTML POST
Di seguito è riportato un esempio di POST form HTML restituito dai domini di Identity per richiamare la pagina di accesso personalizzata.
<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
è cifrato con based64, l'applicazione di accesso personalizzata deve decifrare loginCtx
effettuando le operazioni riportate di seguito.- Decodificare utilizzando un decoder base64 per ottenere i dati binari cifrati
- Utilizzare il nome del tenant e generare una chiave per la decifrazione
- Decifrare i dati utilizzando i dati chiave e binari
Esempio di logica di decifrazione per loginCtx cifrato in Java
Di seguito è riportata una logica di decifrazione di esempio.
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;
}
Esempio di risposta
La risposta deve essere simile all'esempio seguente:
{
"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
contiene alcuni attributi importanti:- requestState: lo stato del processo di autenticazione. Deve essere utilizzato nei POST e nei GET futuri per gli endpoint API di autenticazione dei domini di Identity.
- nextOp: l'operazione successiva che l'applicazione di accesso personalizzata deve eseguire.
- nextAuthFactors: i possibili fattori di autenticazione che la pagina di accesso deve presentare.
I valori di questi attributi definiscono il fattore di autenticazione, i provider di identità e i provider social visualizzati nella pagina di accesso. Viene visualizzata la pagina di accesso contenente i valori decifrati del parametro loginCtx
insieme al token di accesso. La pagina Collega include JavaScript utilizzato per eseguire chiamate AJAX ai domini di Identity.
Passo 2: selezionare un provider di identità esterno
/sso/v1/sdk/idp
. Per questo passo è necessario includere i seguenti attributi:requestState:
ricevuto nella risposta del passo 1- Nome
idpName:
del IdP ricevuto nella risposta del passo 1 - Tipo
idpType:
di IdP ricevuto nella risposta del passo 1 (in questo esempio, è SAML) - ID
idpId:
del IdP ricevuto nella risposta del passo 1 - Nome
appName:
dell'applicazione a cui il client desidera accedere - ID client
clientID:
dell'applicazione a cui il browser sta tentando di accedere - Parametro
authorization:
richiesto per IDP sicuro
Codice POST form HTML di esempio per selezionare un IdP esterno
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");
};
Esempio di richiesta
Di seguito è riportato un esempio del contenuto di FORM POST nell'endpoint /sso/v1/sdk/secure/idp
.
requestState=value&idpName=value&idpType=SAML&idpId=value&appName=name&clientID=value&authorization=accesstoken
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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
I domini di Identity elaborano la richiesta e reindirizzano il browser all'indirizzo IdP esterno selezionato per l'autenticazione e l'autorizzazione. Al termine della funzione IdP esterna, il browser viene reindirizzato ai domini di Identity, che vengono quindi reindirizzati al browser per avviare la verifica a 2 fasi.
Passo 3: autenticarsi utilizzando il fattore preferito (SMS)
I passi iniziali per avviare la verifica a 2 fasi sono simili al passo 1. I domini di Identity creano e sottomettono un modulo HTML contenente i parametri loginCtx
e signature
cifrati. Vedere il Passo 1 per informazioni dettagliate sul modulo POST e su come decifrare.
Dopo la decifrazione del parametro loginCtx
, la risposta deve essere simile all'esempio seguente:
{
"status": "success",
"displayName": "Joe's iPhone",
"nextAuthFactors": [
"SMS"
],
"SMS": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"getBackupFactors",
"resendCode"
],
"requestState": "QjyV3ueFrGQCO.....84gQw2UUm2V7s",
"trustedDeviceSettings": {
"trustDurationInDays": 15
}
}
loginCtx
contiene alcuni attributi importanti:- requestState: lo stato del processo di autenticazione. Deve essere utilizzato nei POST e nei GET futuri per gli endpoint API di autenticazione dei domini di Identity.
- nextOp: l'operazione successiva che l'applicazione di accesso personalizzata deve eseguire.
- nextAuthFactors: i possibili fattori di autenticazione che la pagina di accesso deve presentare.
I valori di questi attributi definiscono il fattore di autenticazione (in questo esempio si tratta di SMS) da presentare nella pagina di accesso. L'utente immette il passcode monouso ricevuto sul dispositivo.
op:
indica al server il tipo di operazione che il client desideraotpCode:
il codice inviato al dispositivo dell'utenterequestState:
ricevuto nella risposta del passo 2
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON per completare l'autenticazione utilizzando il metodo preferito:
{
"op":"credSubmit",
"credentials":{
"otpCode":"108685"
},
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"authnToken": "eyJraWQiOiJT.....kLbxxL97U_0Q",
"status": "success"
}
È quindi necessario creare una sessione. Dopo la creazione della sessione, il browser viene reindirizzato all'URL richiesto in origine. Vedere Creazione di una sessione.
Creazione di una sessione
Questo caso d'uso fornisce un esempio di utilizzo dei domini di Identity per creare una sessione dopo l'autenticazione, ad esempio dopo l'autenticazione mediante MFA.
Utilizzare questa interfaccia API di autenticazione solo se si sta creando un'esperienza di login end-to-end personalizzata sviluppando un'applicazione di accesso personalizzata che deve essere utilizzata dai domini di Identity.
Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Per informazioni sull'uso dell'interfaccia API di autenticazione, vedere gli altri casi d'uso in Uso dell'interfaccia API di autenticazione.
Inviare authnToken
e requestState
come FORM POST quando il client viene completato con autenticazione e MFA e deve creare una sessione. Per questo passo, createSession
deve essere elencato come valore di attributo nextOp
nell'ultima risposta ricevuta e FORM POST deve includere uno dei seguenti attributi.
/sso/v1/sdk/secure/session
:requestState:
ricevuto nell'ultima rispostaoppure
authnToken:
ricevuto nell'ultima rispostaE
- Parametro
authorization:
richiesto per la sessione sicura
Esempio di richiesta
Di seguito è riportato un esempio del contenuto di FORM POST nell'endpoint /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>
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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
Se createSession
non è elencato come valore per il parametro nextOp
nell'ultima risposta ricevuta, potrebbe essere necessario creare un token prima di creare una sessione. Se createSession
è elencato come valore per nextOp
, l'endpoint sdk/session
può essere richiamato direttamente utilizzando solo il requestState
.
Esempio di richiesta
L'esempio riportato di seguito mostra la richiesta di token all'endpoint /sso/v1/sdk/authenticate
in formato JSON.
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"authnToken":"eyJraWQiOiJ....4IacnWKSQ",
"status":"success"
}
Il server controlla che non siano necessari altri fattori di valutazione. Se non è richiesta un'altra valutazione, il token viene inviato nella risposta.
Autenticazione con nome utente e password
Questo caso d'uso fornisce un esempio dettagliato dell'uso dell'API di autenticazione dei domini di Identity per l'autenticazione con le credenziali di un utente.
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Per il caso d'uso, attenersi alla procedura riportata di seguito.
Passo 1: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Nella risposta, il valore nextOp
indica il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, il client deve includere i seguenti attributi:
-
credentials:
nome utente e password -
requestState:
ricevuto nella risposta del passo 1 -
op:
indica al server il tipo di operazione che il client desidera
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"authnToken": "eyJraWQiOiJT.....UKofudtemmJE",
"status": "success"
}
Esempio di risposta di errore
L'esempio seguente mostra il contenuto della risposta in formato JSON quando il nome utente o la password forniti non sono validi:
{
"status": "failed",
"cause": [
{
"message": "You entered an incorrect username or password.",
"code": "AUTH-3001"
}
],
"requestState": "e5kwGYx57taQ.....jyg3nEDFya"
}
Autenticazione del nome utente e della password con il consenso fascia temporale di utilizzo
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API di autenticazione dei domini di Identity per l'autenticazione con le credenziali di un utente con il consenso fascia temporale di utilizzo. Quando l'utente accetta il consenso, viene reindirizzato alla pagina dell'applicazione.
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Passo 1: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Nella risposta, il valore nextOp
indica il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente senza MFA)
credentials:
nome utente e passwordrequestState:
ricevuto nella risposta del passo 1op:
indica al server il tipo di operazione che il client desidera
Se il nome utente e le password sono validi, il server risponde con l'istruzione TOU nelle impostazioni nazionali specificate nel profilo dell'utente. Il server richiede inoltre all'utente di fornire le credenziali di consenso nella richiesta successiva. Se l'istruzione TOU non è presente nelle impostazioni nazionali dell'utente fr
, viene visualizzata la risposta 401 con il messaggio di errore AUTH-3036: la dichiarazione delle condizioni d'uso per le impostazioni nazionali fr.
Esempio di richiesta
L'esempio riportato di seguito mostra il contenuto della richiesta POST in formato JSON nell'endpoint /sso/v1/sdk/authenticate
.
{
"op":"credSubmit",
"credentials":{
"username":"{{username}}",
"password":"{{password}}"
},
"requestState":"{{requestState}}"
}
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON quando vengono aggiunte le impostazioni nazionali dell'utente:
{
"nextOp": [
"acceptTOU"
],
"TOU": {
"statement": "This is a placeholder text. Customers must provide the actual Terms of Use.",
"credentials": [
"consent"
],
"locale": "en"
},
"requestState": "q/tRS4BFAdaimSBhq"
}
}
Esempio di risposta di errore
L'esempio seguente mostra il contenuto della risposta in formato JSON quando non viene aggiunta la fascia temporale di utilizzo per le impostazioni nazionali dell'utente:
{
"status": "failed",
"ecId": "Q0ApB1Y1000000000",
"cause": [
{
"message": "Terms of Use Statement for locale fr isn't added.",
"code": "AUTH-3036"
}
]
}
}
Passo 3: fornire il consenso fascia temporale di utilizzo
In questo scenario, l'utente accetta o rifiuta le Condizioni d'uso per l'applicazione. Se l'utente accetta le Condizioni d'uso, viene reindirizzato alla pagina dell'applicazione.
Se l'utente rifiuta le condizioni d'uso, viene visualizzata la risposta 401 con il messaggio di errore AUTH-3035: è necessario accettare le condizioni d'uso per accedere a questa applicazione.
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta in formato JSON quando l'utente accetta la fascia temporale di utilizzo.
{
"op": "acceptTOU",
"credentials": {
"consent": true
},
"requestState": "{{requestState}}"
}
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta in formato JSON quando l'utente rifiuta la fascia temporale di utilizzo.
{
"op": "acceptTOU",
"credentials": {
"consent": false
},
"requestState": "{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON quando l'utente accetta l'istruzione TOU.
{
"authnToken": "eyJ4NXQjUzI1NiI6Iks0R0hvZVdoUm...YUAvuEOrERXrQRnjybdOkA2Q",
"status": "success",
"ecId": "Q0ApB1Y1000000000"
}
Esempio di risposta di errore
Di seguito viene mostrato il contenuto della risposta in formato JSON quando la fascia temporale di utilizzo viene rifiutata dall'utente.
{
"status": "failed",
"ecId": "Q0ApB1Y1000000000",
"cause": [
{
"message": "You must accept the Terms of Use to access this application.",
"code": "AUTH-3035"
}
]
}
Autenticazione con nome utente e password e MFA e restituzione di un OTP
Questo caso d'uso fornisce un esempio dettagliato dell'uso dell'API REST dei domini di Identity per eseguire l'autenticazione con le credenziali di un utente e l'autenticazione con più fattori (MFA) e per restituire un OTP cifrato nella risposta.
Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity. Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
I domini di Identity possono essere configurati per inviare un passcode monouso (OTP) basato sul tempo direttamente a un utente per l'autenticazione o per fare in modo che il passcode sia cifrato e inviato al client di consumo che può quindi inviarlo all'utente per l'autenticazione.
Gli amministratori, ad esempio, possono configurare i domini di Identity in modo che inviino passcode monouso (OTP) basati sul tempo all'applicazione Oracle Mobile Authenticator (OMA) o inviino gli OTP all'indirizzo di posta elettronica principale dell'utente. In entrambi i casi, i domini di Identity generano l'OTP, lo inviano direttamente all'utente e l'utente immette il codice per l'autenticazione. Per informazioni su come impostare queste opzioni mediante REST, vedere Iscrizione fattore di autenticazione con verifica fattore - SMS e Iscrizione fattore di autenticazione con e-mail di verifica fattore.
-
Passo 1: Creazione di un'applicazione CustomUI
-
Passo 2: generare una coppia di chiavi per un certificato con firma automatica
-
Passo 3: configurare l'applicazione per restituire l'OTP nella risposta
-
Passo 4: richiedere l'OTP
Questi passi presuppongono che l'autenticazione MFA sia abilitata e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configurazione delle impostazioni di autenticazione con più fattori.
Cifratura e decifrazione
Questa implementazione utilizza la seguente specifica per cifrare e decifrare il codice OTP ricevuto. Vedere PKCS #1: RSA Cryptography Specifications, Versione 2.0, sezione 7.1 RSAES-OAEP.
Codice decifrazione OTP
/*
* 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();
}
}
}
Passo 1: Creazione di un'applicazione CustomUI
Per ulteriori informazioni sulle applicazioni personalizzate, vedere Aggiungi applicazioni.
Passo 2: generare una coppia di chiavi per un certificato con firma automatica
- Verificare che il file di configurazione
otp-client.conf
contenga le seguenti informazioni. Quindi, generare una coppia di chiavi privata e pubblica.[ 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"
-
Utilizzare il comando seguente per generare un certificato autofirmato.
#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
Passo 3: configurare l'applicazione per restituire l'OTP nella risposta
- Nella console di Identity Cloud Service espandere il cassetto di navigazione, selezionare Applicazioni, CustomUI applicazione, Configurazione e quindi Configurazione client.
- Importare il certificato con firma automatica nel certificato client sicuro e salvare la configurazione.
Passo 4: richiedere l'OTP
Attributo | Valori supportati/Valori di esempio | A più valori | Dettagli d'uso |
---|---|---|---|
userFlowControlledByExternalClient
|
true / falso | false |
Impostare questa opzione su
e l'OTP verrà restituito nella risposta nel formato cifrato specificato. Nota: il certificato utilizzato per la cifratura viene caricato nell'applicazione in anticipo e viene fatto riferimento utilizzando l'attributo |
x5t | Stringa / X509 SHA-1 Certificato Thumbprint |
Quando specificato, il servizio utilizza questo certificato caricato per cifrare i dati OTP. Nota: l'attributo "x5t" deve corrispondere al certificato caricato. |
{
"op": "credSubmit",
"credentials": {
"username": "test.user",
"password": "example-password"
},
"userFlowControlledByExternalClient": true,
"x5t": "<certificate thumbprint>",
"requestState": "{{requestState}}"
}
Attributo | Valori supportati/Valori di esempio | A più valori | Dettagli d'uso |
---|---|---|---|
otp
|
Mappa
|
false |
Se presente nella risposta, l'attributo contiene l'OTP cifrato con i dettagli riportati di seguito.
|
Esempio di risposta
{
"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
}
}
Generazione del token di accesso mediante l'API di autenticazione
Questo caso d'uso fornisce un esempio dettagliato dell'uso dei domini di Identity per generare il token di accesso utilizzando l'API di autenticazione. L'utente ottiene le informazioni utente tramite il token di accesso utente mediante l'API di autenticazione.
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Quando l'utente tenta di accedere a un'applicazione associata alla fascia temporale di utilizzo, il server dei domini di Identity utilizza il nome dell'applicazione per recuperare il criterio assegnato a questa applicazione. In base alle impostazioni del tenant, il server ottiene il provider di identità e il criterio di autenticazione e quindi guida l'utente al passo successivo.
Passo 1: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Nella risposta, il valore nextOp
indica il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
authnToken
. Nella richiesta devono essere inclusi i seguenti elementi:credentials:
nome utente e passwordrequestState:
ricevuto nella risposta del passo 1op:
indica al server il tipo di operazione che il client desidera
AuthnToken
è il file id_token in formato JWT che rappresenta le informazioni sull'utente corrente, la sessione e i dati della richiesta. Viene utilizzato per creare un cookie di sessione SSO e reindirizzare all'URL di destinazione. Se il nome utente e la password sono validi, viene recuperato AuthnToken
.
Esempio di richiesta
L'esempio riportato di seguito mostra il contenuto della richiesta POST in formato JSON nell'endpoint /sso/v1/sdk/authenticate
.
{
"op":"credSubmit",
"credentials":{
"username":"admin@oracle.com",
"password":"example-password"
},
"requestState": "{{requestState}}"
}
Esempio di risposta
L'esempio riportato di seguito mostra il contenuto della risposta in formato JSON in cui viene recuperato AuthnToken
.
{
"authnToken": "eyJ4NXQjUzI1NiI6Iks0R0hvZ...ZLjOZmKAvORB8OaV1Xqt1GL3tx1kyWA",
"status": "success",
"ecId": "5fR1O171000000000"
}
Passo 3: Genera token di accesso
Dopo aver recuperato un AuthnToken
, viene utilizzato per ottenere il token di accesso dal server OAuth.
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta in formato JSON.
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&scope=urn:opc:idm:__myscopes__&assertion={{authnToken}}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"access_token": "<redacted>",
"token_type": "Bearer",
"expires_in": 7600
}
Passo 4: ottenere informazioni utente
L'utente sottomette il token di accesso per ottenere informazioni quali nome utente, nome visualizzato, ID e-mail e così via.
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta in formato JSON.
{{HOST}}/admin/v1/Me
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON con le informazioni utente.
{
"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"
]
}
Autenticazione con nome utente e password e MFA
Questo caso d'uso fornisce un esempio dettagliato dell'uso dell'API REST dei domini di Identity per l'autenticazione con le credenziali di un utente e l'autenticazione con più fattori (MFA).
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Per questo caso d'uso, attenersi alla procedura riportata di seguito.
Questi passi presuppongono che l'autenticazione MFA sia abilitata e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configurazione delle impostazioni di autenticazione con più fattori.
Passo 1: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Nella risposta, il valore nextOp
indica il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, il client deve includere i seguenti attributi:
-
credentials:
nome utente e password -
requestState:
ricevuto nella risposta del passo 1 -
op:
indica al server il tipo di operazione che il client desidera
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON poiché le notifiche PUSH sono il fattore preferito:
{
"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
}
}
Se l'impostazione Dispositivo sicuro è disabilitata a livello di tenant, l'attributo {{trustedDeviceSettings}}
non viene restituito nella risposta.
{{trustedDeviceSettings}}
, ma il valore {{trustDurationInDays}}
viene restituito come 0
."trustedDeviceSettings": {
"trustDurationInDays": 0
}
Nella risposta, lo stato è pending
poiché l'utente deve consentire o negare la notifica PUSH sul proprio dispositivo. I valori nextOp
nella risposta indicano gli elementi che possono essere inviati come valore op
nella richiesta successiva. In questo esempio di caso d'uso, nel passo successivo viene inviato credSubmit
.
Passo 3: autenticarsi utilizzando il fattore preferito
Eseguire l'autenticazione utilizzando il fattore preferito, che in questo esempio di caso d'uso è Notifiche PUSH. Il client deve includere i seguenti attributi nella richiesta:
-
op:
indica al server il tipo di operazione che il client desidera -
requestState:
ricevuto nella risposta del passo 2
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON per completare l'autenticazione utilizzando il metodo preferito:
{
"op":"credSubmit",
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"authnToken": "eyJraWQiOiJT.....kLbxxL97U_0Q",
"status": "success"
}
Autenticazione con nome utente e password e iscrizione a MFA
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API di autenticazione dei domini di Identity per eseguire l'autenticazione con le credenziali di un utente e quindi iscriversi all'autenticazione a più fattori (MFA).
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Questi passi presuppongono che l'autenticazione MFA sia abilitata e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configurazione delle impostazioni di autenticazione con più fattori.
Passo 1: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Nella risposta, il valore nextOp
indica il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, il client deve includere i seguenti attributi:
-
credentials:
nome utente e password -
requestState:
ricevuto nella risposta del passo 1 -
op:
indica al server il tipo di operazione che il client desidera
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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"
}
In questo esempio di caso d'uso, poiché l'autenticazione MFA è impostata come facoltativa nel criterio di accesso (indicato da un valore false
per l'attributo enrollmentRequired
), all'utente viene data la possibilità di iscriversi o saltare l'iscrizione. Se è richiesto l'autenticazione MFA, l'unico valore nextOp
sarebbe enrollment.
In questo esempio di caso d'uso, nel passo successivo viene inviato enrollment
per avviare l'iscrizione al fattore MFA per l'utente. BYPASSCODE mancante come valore nextAuthFactors
poiché l'utente non può iscriversi utilizzando un codice bypass. Il codice bypass deve essere generato dall'utente utilizzando Profilo personale o richiedendo a un amministratore di generarne uno.
Passo 3: Avvia iscrizione autenticazione secondo fattore
-
op:
indica al server il tipo di operazione che il client desidera -
authFactor:
definisce il fattore di autenticazione a cui l'utente desidera iscriversi -
requestState:
ricevuto nella risposta del passo 2
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op":"enrollment",
"authFactor":"TOTP",
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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
indicano gli elementi che possono essere inviati come valore op
nella richiesta successiva. In questo esempio di caso d'uso, nel passo successivo viene inviato credSubmit
.Il valore di
content
inizia sempre con oraclemobileauthenticator//.
Passo 4: Sottometti credenziali fattore
requestState
ricevute nella risposta del passo 3. Tenere presente che il payload della richiesta non contiene l'attributo authFactor
perché requestState
lo contiene. Il client deve includere i seguenti attributi:op:
indica al server il tipo di operazione che il client desiderarequestState:
ricevuto nella risposta del passo 3
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON per sottomettere le credenziali del fattore:
{
"op":"credSubmit",
"requestState":"{{requestState}}"
}
Esempio di risposta
Lo stato success
viene visualizzato nella risposta quando l'applicazione OMA alla comunicazione del canale secondario del server viene completata e la verifica optCode
riesce. L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"displayName": "Joe's iPhone",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "eyZa+10USFR7.....6I2vnfK82hnQ"
}
Nella risposta, i valori nextOp
indicano gli elementi che possono essere inviati come valore op
nella richiesta successiva. In questo esempio di caso d'uso, nel passo successivo viene inviato createToken
.
Esempio di risposta in sospeso
Lo stato pending
viene visualizzato quando la comunicazione tra l'applicazione OMA e il server nel canale secondario non viene completata. Il client continua a eseguire il polling ogni 10 secondi e continua a eseguire il polling per due minuti. Dopo due minuti, il server invia lo stato di errore se la verifica otpCode
non riesce.
{
"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"
}
Passo 5: Creare il token di autenticazione
Questo passo indica che il client viene eseguito con tutti i file authnFactors
e richiede la creazione di una sessione. Il server verifica che non sia necessario alcun altro fattore di valutazione (a seconda di quanto definito per il criterio) e risponde con il token o nega l'accesso. Il client deve includere i seguenti attributi:
-
op:
indica al server il tipo di operazione che il client desidera -
requestState:
ricevuto nella risposta al passo 4
Esempio di richiesta
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"authnToken": "{{authnToken}}",
"status": "success"
}
Autenticazione del nome utente e della password e iscrizione al recupero dell'account
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API di autenticazione dei domini di Identity per l'autenticazione con le credenziali di un utente e quindi per la registrazione al recupero dell'account.
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
Questi passi presuppongono che per il recupero dell'account siano abilitati più fattori, ma la registrazione MFA non è configurata. Vedere Configura recupero account e Configura impostazioni di autenticazione con più fattori.
Passo 1: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Nella risposta, il valore nextOp
indica il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, il client deve includere i seguenti attributi:
-
credentials:
nome utente e password -
requestState:
ricevuto nella risposta del passo 1 -
op:
indica al server il tipo di operazione che il client desidera
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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"
}
In questo esempio di caso d'uso, l'utente deve iscriversi al recupero dell'account (indicato da un valore true
per l'attributo accRecEnrollmentRequired:true
). nextAuthFactors
indica i fattori a cui l'utente può iscriversi per il recupero dell'account.
In questo esempio di caso d'uso, la registrazione viene inviata nel passo successivo per avviare la registrazione per il recupero dell'account per l'utente.
Passo 3: Avvia iscrizione recupero account
Questo passo avvia la registrazione SMS. Il client deve includere i seguenti attributi:
op
: indica al server il tipo di operazione che il client desideraauthFactor
: definisce il fattore di autenticazione a cui l'utente desidera iscriversiphoneNumber
: definisce il numero di telefono in cui verrà inviato il testo SMScountryCode
: definisce il prefisso internazionale del numero di telefono in cui verrà inviato il testo SMSrequestState
: ricevuto nella risposta del passo 2
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op":"enrollment",
"authFactor":"SMS",
"credentials":{
"phoneNumber":"1122334455",
"countryCode":"+44"
},
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della richiesta in formato JSON.
{
"status": "success",
"ecId": "R^iCq19G000000000",
"displayName": "+44XXXXXXXX455",
"SMS": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"resendCode",
"enrollment"
],
"requestState": "Y4sMHf7izgxcspF6zr...Y3GXLjjudeRMM2ZNty4E"
}
Nella risposta, i valori nextOp
indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, nel passo successivo viene inviato credSubmit
. L'indirizzo otpCode
viene inviato tramite SMS al dispositivo dell'utente.
Passo 4: Sottometti credenziali fattore
op
: indica al server il tipo di operazione che il client desiderarequestState
: ricevuto nella risposta del passo 3
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON per sottomettere le credenziali del fattore:
{
"op":"credSubmit",
"credentials":{
"otpCode":"974311"
},
"requestState":"{{requestState}}"
}
Esempio di risposta
Lo stato di operazione riuscita viene visualizzato nella risposta quando la verifica optCode riesce. L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "R^iCq1BG000000000",
"accRecEnrollmentRequired": false,
"displayName": "+44XXXXXXXX455",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "BKbGp43pwZad3zMSePWu7R47Va6myZdNY...vRVFN2FFQKIoDto"
}
Nella risposta, il valore accRecEnrollmentRequired
viene impostato su false
poiché l'iscrizione dell'account è riuscita. I valori nextOp
indicano gli elementi che possono essere inviati come valore op
nella richiesta successiva. Il valore nextOp
"iscrizione" consente all'utente di passare a un altro fattore per iscriversi al recupero dell'account. In questo esempio di caso d'uso, nel passo successivo viene inviato createToken
.
Passo 5: Creare il token di autenticazione
op
: indica al server il tipo di operazione che il client desidera requestState: ricevuta nella risposta del passo 4requestState
: ricevuto nella risposta al passo 4
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "R^iCq1FG000000000"
}
Autenticazione di nome utente e password e iscrizione al recupero account e all'autenticazione MFA
Questo caso d'uso fornisce un esempio dettagliato dell'utilizzo dell'API di autenticazione dei domini di Identity per eseguire l'autenticazione con le credenziali di un utente e quindi iscriversi all'autenticazione MFA (Account Recovery and Multifactor Authentication).
- Utilizzare questa interfaccia API di autenticazione solo se si sta creando la propria esperienza di login end-to-end sviluppando un'applicazione di collegamento personalizzata che deve essere utilizzata dai domini di Identity.
- Questa interfaccia API di autenticazione non può essere utilizzata per integrare le applicazioni con i domini di Identity ai fini del Single Sign-On.
Scaricare la raccolta di esempi di casi d'uso di autenticazione dei domini di Identity e il file delle variabili globali dalla cartella idcs-authn-api-rest-clients all'interno del repository idm-samples GitHub, quindi importarli in Postman.
- Passo 1: avviare il flusso di autenticazione
- Passo 2: Invia le credenziali dell'utente
- Passo 3: Avvia iscrizione recupero account
- Passo 4: Sottometti credenziali fattore
- Passo 5: Creare il token di autenticazione
- Passo 6: impostare SMS come fattore MFA predefinito in sovrapposizione
- Passo 7: Creare il token di autenticazione
Questi passi presuppongono che il recupero dell'account e l'autenticazione MFA siano abilitati e che venga creato un criterio di accesso per l'autenticazione MFA. Vedere Configura recupero account e Configura impostazioni di autenticazione con più fattori.
Passo 1: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "ecId",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"example-password"
]
},
"requestState": "{{requestState}}"
}
Nella risposta, il valore nextOp
indica il valore che può essere inviato come valore op
nella richiesta successiva. In questo esempio di caso d'uso, è necessario inviare credSubmit
nel passo successivo. Il file requestState
contiene i dati contestuali necessari per elaborare la richiesta.
Passo 2: Invia le credenziali dell'utente
Sottomettere le credenziali dell'utente come primo fattore, ovvero il nome utente e la password. Per questa fase, il client deve includere i seguenti attributi:
-
credentials:
nome utente e password -
requestState:
ricevuto nella risposta del passo 1 -
op:
indica al server il tipo di operazione che il client desidera
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op": "credSubmit",
"credentials": {
"username": "{{username}}",
"password": "{{password}}"
},
"requestState": "{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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"
}
In questo esempio di caso d'uso, l'utente deve iscriversi al recupero dell'account (indicato da un valore true
per l'attributo accRecEnrollmentRequired:true
). nextAuthFactors
indica i fattori a cui l'utente può iscriversi per il recupero dell'account.
In questo esempio di caso d'uso, la registrazione viene inviata nel passo successivo per avviare la registrazione per il recupero dell'account per l'utente.
Passo 3: Avvia iscrizione recupero account
Questo passo avvia la registrazione SMS. Il client deve includere i seguenti attributi:
op
: indica al server il tipo di operazione che il client desideraauthFactor
: definisce il fattore di autenticazione a cui l'utente desidera iscriversiphoneNumber
: definisce il numero di telefono in cui verrà inviato il testo SMScountryCode
: definisce il prefisso internazionale del numero di telefono in cui verrà inviato il testo SMSrequestState
: ricevuto nella risposta del passo 2
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op":"enrollment",
"authFactor":"SMS",
"credentials":{
"phoneNumber":"1122334455",
"countryCode":"+44"
},
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della richiesta in formato JSON.
{
"status": "success",
"ecId": "HI^kd1N0000000000",
"displayName": "+44XXXXXXXX213",
"SMS": {
"credentials": [
"otpCode"
]
},
"nextOp": [
"credSubmit",
"resendCode",
"enrollment"
],
"requestState": "FnwYT23S0qo+RHXN3Sx80D3....8CsoT3QezVbynT3LfZY3+sXN5E8OtEdM"
}
Nella risposta, i valori nextOp
indicano cosa può essere inviato come valore op nella richiesta successiva. In questo esempio di caso d'uso, nel passo successivo viene inviato credSubmit
. L'indirizzo otpCode
viene inviato tramite SMS al dispositivo dell'utente. Le credenziali comunicano all'utente l'input necessario per passare alla richiesta successiva.
Passo 4: Sottometti credenziali fattore
requestState
ricevuto nella risposta del passo 3. Tenere presente che il payload della richiesta non contiene l'attributo authFactor
perché requestState
lo contiene. Il client deve includere i seguenti attributi:op
: indica al server il tipo di operazione che il client desiderarequestState
: ricevuto nella risposta del passo 3
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON per sottomettere le credenziali del fattore:
{
"op":"credSubmit",
"credentials":{
"otpCode":"974311"
},
"requestState":"{{requestState}}"
}
Esempio di risposta
Lo stato di operazione riuscita viene visualizzato nella risposta quando la verifica optCode
riesce. L'esempio seguente mostra il contenuto della risposta in formato JSON.
{
"status": "success",
"ecId": "HI^kd1P0000000000",
"accRecEnrollmentRequired": false,
"displayName": "+44XXXXXXXX455",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "Z+ysro8gFyPPT5bI9C/RykLfRrq5rBXCOO68/wZcgkllw765qd7SNvhRN6ZHp0Xiw2FIN9nOeio7SpsEAlYxO2xQ/1fF5lAjo0jwJEzIgSRt8xj/vAQeSLhX+PRm2a1rRYHwSa9uFcUBkNA.....KP7CPh2/yrdZF4WpbI"
}
Nella risposta, il valore accRecEnrollmentRequired
viene impostato su false
poiché l'iscrizione dell'account è riuscita. I valori nextOp
indicano gli elementi che possono essere inviati come valore op
nella richiesta successiva. Il valore nextOp
"iscrizione" consente all'utente di passare a un altro fattore per iscriversi al recupero dell'account. In questo esempio di caso d'uso, nel passo successivo viene inviato createToken
.
Passo 5: Creare il token di autenticazione
op
: indica al server il tipo di operazione che il client desidera ricevere requestState nella risposta del passo 4requestState
: ricevuto nella risposta al passo 4
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Esempio di risposta
L'esempio seguente mostra il contenuto della risposta in formato 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"
}
Nella risposta, poiché è richiesto l'autenticazione MFA, il valore enrollmentRequired
è true
in mfaSettings
. Di conseguenza, non viene emesso alcun token. Il file EnrolledAccountRecoveryFactorsDetails
mostra i fattori di recupero dell'account a cui l'utente si è iscritto. I valori nextOp
indicano gli elementi che possono essere inviati come valore op
nella richiesta successiva. In questo esempio, il valore nextOp
"iscrizione" indica che l'utente deve iscriversi all'autenticazione MFA.
Passo 6: impostare SMS come fattore MFA predefinito in sovrapposizione
Questo passo indica che il client deve iscriversi all'autenticazione MFA.
Il client deve includere i seguenti attributi:
authFactor
: indica il fattore a cui iscriversi per l'autenticazione MFAaccountRecoveryFactor
: se impostato su true, indica che l'utente desidera riutilizzare il fattore di recupero dell'account già registrato per l'autenticazione MFA.
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op":"enrollment",
"authFactor": "SMS",
"credentials":{
"accountRecoveryFactor" : true
},
"requestState": "{{requestState}}"
}
Esempio di risposta
{
"status": "success",
"ecId": "HI^kd1R0000000000",
"nextOp": [
"createToken",
"createSession",
"enrollment"
],
"requestState": "7J6m/Z1PxXQZp4pigzt1F0CXp0kotX.....WXP2knQa16MNj5E8"
}
Nella risposta i valori nextOp
indicano cosa può essere inviato come valore op nella richiesta successiva. Il valore nextOp
"iscrizione" consente all'utente di iscrivere un fattore aggiuntivo per l'autenticazione MFA. In questo esempio di caso d'uso, nel passo successivo viene inviato createToken
.
Passo 7: Creare il token di autenticazione
authnFactors
e richiede la creazione di una sessione. A seconda di quanto definito per il criterio, il server verifica che non sia necessaria alcuna valutazione di altri fattori e risponde con il token o nega l'accesso. Il client deve includere i seguenti attributi:op
: indica al server il tipo di operazione che il client desiderarequestState
: ricevuto nella risposta del passo 6
Esempio di richiesta
L'esempio seguente mostra il contenuto della richiesta POST in formato JSON.
{
"op":"createToken",
"requestState":"{{requestState}}"
}
Esempio di risposta
{
"authnToken": "{{authnToken}}",
"status": "success",
"ecId": "HI^kd1W0000000000"
}
Autenticazione con nome utente e password e conservazione della connessione
Abilitare e configurare l'opzione Mantieni collegamento (KMSI) in modo che gli utenti possano accedere a un dominio di Identity senza dover eseguire ripetutamente l'accesso.
Per configurare KMSI utilizzando interfacce di applicazione programmatiche, attenersi alla procedura riportata di seguito.
- Passo 1: abilitare KMSI per un dominio di Identity
- Passo 2: avviare il flusso di autenticazione
- Passo 3: Invia le credenziali dell'utente con KMSI
- Passo 4: riemettere authnToken dopo la scadenza della sessione
- Passo 5: sottomettere le credenziali utente con il flusso KMSI e MFA
- Passo 6: riemettere authnToken dopo la scadenza della sessione quando è impostato un fattore MFA
Questo argomento include inoltre le sezioni riportate di seguito.
- kmsiToken Flusso con requestState
- Modifiche a /sso/v1/sdk/secure/session
- Firma payload per/autorizza chiamate avviate
Informazioni preliminari
- Assicurarsi che il servizio KMSI sia stato abilitato per l'account cloud. Per abilitare KMSI, è necessario inoltrare una richiesta di servizio (RS) al Supporto Oracle. Specificare il nome della funzione seguente nella richiesta di servizio:
access.kmsi.support
. Vedere Richieste di supporto. - Rivedere le sezioni riportate di seguito in questo argomento.
Passo 1: abilitare KMSI per un dominio di Identity
- Ottenere il token di accesso amministratore del dominio di Identity per l'account.
- Eseguire
GET
sull'endpoint/admin/v1/KmsiSettings/KmsiSettings
. Il sistema restituisceKmsiSettings
. - Aggiornare gli attributi necessari ed eseguire
PUT
sull'endpoint/admin/v1/KmsiSettings/KmsiSettings
.
tokenValidityInDays
- Immettere per quanti giorni gli utenti possono rimanere collegati prima di scollegarsi automaticamente.
kmsiEnabled
- Indica se il servizio KMSI è abilitato per il dominio di Identity.
maxAllowedSessions
- Immettere il numero massimo di sessioni collegate che un utente può avere.
Richiesta di esempio
{
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:KmsiSettings"
],
"tokenValidityInDays": 2160,
"kmsiEnabled": true,
"maxAllowedSessions": 5,
"id": "KmsiSettings"
}
Passo 2: avviare il flusso di autenticazione
Ottenere il file requestState
iniziale per avviare il flusso di autenticazione.
Esempio di richiesta
L'esempio seguente mostra la richiesta in formato cURL:
curl -X GET
-H "Content-Type: application/json"
-H "Authorization: Bearer {{access_token_value}}"
https://<domainURL>/sso/v1/sdk/authenticate?appName={{app_name}}
Il valore
appName
è facoltativo. appName
è il nome dell'applicazione a cui il client desidera accedere. Se viene fornito un appName
, vengono elaborati i criteri di accesso specifici dell'applicazione e viene richiesto al client di individuare i fattori richiesti in base a tale criterio.Esempio di risposta
{
"status": "success",
"ecId": "ZzK2c1^0000000000",
"nextOp": [
"credSubmit"
],
"nextAuthFactors": [
"USERNAME_PASSWORD"
],
"USERNAME_PASSWORD": {
"credentials": [
"username",
"password"
]
},
"keepMeSignedInEnabled": false,
"requestState": "FT7qI"
}
Prendere nota del nuovo attributo keepMeSignedInEnabled
incluso nella risposta. Indica che questo dominio di Identity e questa applicazione supportano il servizio KMSI. Se si dispone di un'interfaccia personalizzata, utilizzare questo attributo per visualizzare l'opzione Mantieni collegamento nella pagina di accesso.
Passo 3: Invia le credenziali dell'utente con KMSI
- Operazione:
POST
-
Endpoint:
/sso/v1/sdk/authenticate
Prendere nota del nuovo attributo
keepMeSignedIn
incluso nella richiesta. Questo attributo indica che l'utente desidera utilizzare KMSI.{
"op": "credSubmit",
"credentials": {
"username": "username",
"password": "Password"
},
"keepMeSignedIn": true,
"kmsiDeviceDisplayName": "Postman KeepMeSigned In",
"requestState": "requestState"
}
Se si dispone di un'interfaccia personalizzata, utilizzare questo attributo per visualizzare l'opzione KMSI, selezionare lo stato della casella di controllo (on o off) e inviare questo parametro per creare la sessione KMSI.
Esempio di risposta
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Nell'esempio di risposta, prendere nota dell'attributo kmsiToken
. Questo token può essere utilizzato per accedere a qualsiasi applicazione in futuro senza richiedere a un utente di connettersi di nuovo.
Passo 4: riemettere authnToken dopo la scadenza della sessione
-
Operazione:
POST
-
Endpoint:
/sso/v1/sdk/authenticate
Esempio di richiesta
{
"op": "credSubmit",
"authFactor": "KMSI",
"appName": "AppName",
"kmsiToken": "{{kmsiToken}}"
}
Esempio di risposta
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Si noti l'operazione credSubmit
con i nuovi authFactor
, appName
e kmsiToken
inviati nella richiesta. SSO valuta la richiesta e restituisce authnToken
e l'ultimo kmsiToken
aggiornato nella risposta. Si tratta di un kmsiToken
aggiornato e sostituisce il token esistente. È necessario includere questo kmsiToken
aggiornato nella richiesta successiva.
Passo 5: sottomettere le credenziali utente con il flusso KMSI e MFA
Avviare GET
sul /sso/v1/sdk/authenticate
dal Passo 2: avvio del flusso di autenticazione.
-
Operazione:
POST
-
Endpoint:
/sso/v1/sdk/authenticate
Esempio di risposta
{
"op": "credSubmit",
"credentials": {
"username": "username",
"password": "Password"
},
"keepMeSignedIn": true,
"kmsiDeviceDisplayName": "Postman KeepMeSigned In",
"requestState": "requestState"
}
Esempio di risposta
{
"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
}
}
Dopo aver ottenuto il passcode monouso (OTP) sul dispositivo, aggiungere l'OTP nella richiesta.
Esempio di richiesta
{
"op": "credSubmit",
"authFactor": "EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE",
"credentials": {
"otpCode": "XXXX"
},
"requestState": "6tnX6Q4RGqe4Lq73WD0pQ"
}
La risposta include authToken
e kmsiToken
. Questo è un file kmsiToken
aggiornato.
Esempio di risposta
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Passo 6: riemettere authnToken dopo la scadenza della sessione quando è impostato un fattore MFA
Quando un utente tenta di accedere utilizzando kmsiToken
e viene configurato un secondo fattore, all'utente viene sempre richiesta l'autenticazione del secondo fattore. Solo dopo l'autenticazione riuscita, nella risposta verranno inviati authnToken
e kmsiToken
.
-
Operazione:
POST
-
Endpoint:
/sso/v1/sdk/authenticate
Esempio di richiesta
{
"op": "credSubmit",
"authFactor": "KMSI",
"appName": "AppName",
"kmsiToken": "{{kmsiToken}}"
}
La risposta contiene un token KMSI e una richiesta di verifica MFA aggiornati.
Esempio di risposta
{
"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"
}
Ripetere lo stesso processo in cui verrà nuovamente richiesto l'OTP sul dispositivo. Fornire il payload riportato di seguito con OTP. La risposta deve includere authnToken
.
Esempio di richiesta
{
"op": "credSubmit",
"authFactor": "EMAIL-OTP/TOTP/SMS-OTP/PUSH/BYPASSCODE",
"credentials": {
"otpCode": "XXXX"
},
"requestState": "6tnX6Q4RGqe4Lq73WD0pQ"
}
Esempio di risposta
{
"authnToken": "QpfQIQ",
"status": "success",
"ecId": "PR8Yf160000000000"
}
kmsiToken Flusso con requestState
Utilizzare questo flusso per supportare il contesto del browser quando si possiede il token KMSI, ma non il cookie KMSI. Dopo la scadenza della sessione, l'applicazione effettua una chiamata di autorizzazione al sistema di identità con redirectUrl
, state
, nonce
e così via. Nella risposta, il sistema di identità restituisce requestState
all'interno di loginCtx
. Questo requestState insieme al token KMSI viene passato per reindirizzare l'applicazione richiesta dopo l'estensione della sessione.
-
Operazione:
POST
-
Endpoint:
/sso/v1/sdk/authenticate
authFactor
e l'autenticazione KMSI con il parametro requestState
. Ciò consente di recuperare kmsiToken
con requestState
da loginCtx
. Se
requestState
e kmsiToken
non appartengono alla stessa applicazione, la richiesta viene rifiutata.Esempio di richiesta
{
"op": "credSubmit",
"authFactor": "KMSI",
"appName": "KMSIAdmin",
"kmsiToken": "{{kmsiToken}}",
"requestState": "{{requestState}}"
}
Esempio di risposta
{
"authnToken": "QpfQIQ",
"kmsiToken": "ZJM",
"status": "success",
"ecId": "PR8Yf160000000000"
}
Modifiche a /sso/v1/sdk/secure/session
KMSI richiede l'aggiunta di un nuovo attributo all'endpoint /sso/v1/sdk/secure/session
. kmsiToken
deve essere inviato all'endpoint dall'applicazione di login personalizzata.
Esempio di richiesta | Esempio di risposta |
---|---|
kmsiToken |
La nuova variabile form post kmsiToken insieme a authnToken o requestState reindirizzerà all'applicazione insieme al cookie di sessione SSO e al cookie KMSI. |
Firma payload per chiamate avviate /authorize
- Quando un utente accede a qualsiasi applicazione Web protetta dai domini di Identity, immette l'URL dell'applicazione, ad esempio
https://example.com/home/pages/profile
. - Il sistema esegue il reindirizzamento alla chiamata al dominio di Identity
/authorize
. - Il dominio di Identity reindirizza l'utente alla pagina di collegamento personalizzato distribuita dal cliente.
- L'applicazione di accesso gestita dal cliente raccoglie i parametri di input e decodifica l'input
loginCtx
. - Il parametro di input decifrato corrisponde alla chiamata
GET
/sso/v1/sdk/authenticate
. - Il payload contiene
keepMeSignedInEnabled
per identificare se il servizio KMSI è abilitato. - L'applicazione di login personalizzata raccoglie le credenziali e le sottomette al dominio di Identity.
- Il dominio di Identity convalida le credenziali e genera i problemi
kmsiToken
eauthnToken
. - L'applicazione di login personalizzata utilizza gli endpoint
authnToken
ekmsiToken
durante la chiamata all'endpoint/sso/v1/sdk/secure/session
. La nuova sintassi dell'endpoint sicuro viene descritta in Modifiche a /sso/v1/sdk/secure/session. - Il dominio di Identity convalida
authnToken
,kmsiToken
, quindi il sistema di Identity emette il cookie di sessione SSO e il cookie KMSI. - Durante la sessione, il cookie KMSI viene convalidato per estendere la sessione senza reinserire le credenziali.