Informazioni sull'autenticazione tra le applicazioni Python e Oracle Identity Cloud Service
È possibile ottenere informazioni sull'autenticazione tra le applicazioni Web Python e Oracle Identity Cloud Service. Ciò include la comprensione di quanto segue:
-
Casi d'uso per l'uso di un SDK con un'applicazione Python per l'autenticazione con Oracle Identity Cloud Service.
-
Flusso di autenticazione a tre fasi supportato da Oracle Identity Cloud Service per l'SDK Python
-
Metodi e funzioni dell'SDK Python
Informazioni sui flussi di autenticazione a tre fasi
Oracle Identity Cloud Service supporta il flusso di autenticazione a tre fasi per l'SDK Python. In questo flusso gli utenti interagiscono direttamente con Oracle Identity Cloud Service. Dopo che un utente si è connesso, Oracle Identity Cloud Service emette un codice di autorizzazione scambiato dall'SDK per un token di accesso utente. Questo token di accesso può essere utilizzato dall'applicazione Python per concedere agli utenti l'accesso alle risorse protette nell'applicazione. Il flusso a tre fasi utilizza il tipo di concessione del codice di autorizzazione.
Per aumentare la sicurezza, Oracle consiglia di utilizzare i flussi a tre fasi per integrare le applicazioni Web Python con Oracle Identity Cloud Service per l'autenticazione. Utilizzando il tipo di privilegio del codice di autorizzazione, è inoltre possibile accedere ad altre applicazioni protette da Oracle Identity Cloud Service senza dover eseguire nuovamente l'autenticazione.
Informazioni sui casi d'uso principali per l'uso di un SDK con un'applicazione Python
L'applicazione Web Python implementa due casi d'uso: uno per l'autenticazione degli utenti e l'altro per l'accesso a informazioni dettagliate sull'utente che ha effettuato l'accesso.
I diagrammi di flusso dati riportati di seguito illustrano il flusso di eventi, chiamate e risposte tra il browser Web, l'applicazione Web e Oracle Identity Cloud Service per ogni caso d'uso.
Figura - Caso d'uso 1: autenticazione utente

Descrizione della "Figura - Caso d'uso 1: Autenticazione utente"
Il flusso di dati avviene in questo modo:
-
L'utente richiede una risorsa protetta.
-
Il modulo di autenticazione utilizza l'SDK per generare un URL di codice di autorizzazione della richiesta per Oracle Identity Cloud Service e inviare questo URL come risposta di reindirizzamento al browser Web.
-
Il browser Web chiama l'URL.
-
Viene visualizzata la pagina Collega di Oracle Identity Cloud Service.
-
L'utente sottomette le credenziali di accesso a Oracle Identity Cloud Service.
-
Dopo aver eseguito correttamente il login, Oracle Identity Cloud Service crea una sessione per l'utente ed emette un codice di autorizzazione.
-
L'applicazione Web esegue una chiamata backend (o da server a server) per scambiare il codice di autorizzazione per un token di accesso utente.
-
Oracle Identity Cloud Service emette un token di accesso e un token ID.
-
Viene stabilita una sessione e l'utente viene reindirizzato alla home page.
-
Viene visualizzata la home page dell'applicazione Web.
Figura - Caso d'uso 2: Recupera dettagli utente

Descrizione della "Figura - Caso d'uso 2: Recupera dettagli utente"
Il flusso di dati avviene in questo modo:
-
L'utente richiede la risorsa
/myProfile
. -
L'applicazione Web utilizza l'SDK di Oracle Identity Cloud Service per convalidare il token ID.
-
I dati restituiti dalla convalida del token ID contengono i dettagli dell'utente nel formato di un oggetto JSON.
-
La pagina Profilo personale visualizza l'oggetto JSON come contenuto HTML.
Informazioni sui metodi e sulle funzioni dell'SDK Python
L'SDK Python è disponibile in due file python, IdcsClient.py
e Constants.py
, da includere nell'applicazione Web.
Questi file python dipendono da librerie di terze parti che devono essere incluse anche nell'applicazione. Per includerli, aprire il file zip dell'SDK, estrarre i file README.txt
e requirements.txt
in una cartella temporanea ed eseguire il comando pip install -r requirements.txt
.
Un'applicazione Web di esempio è stata sviluppata utilizzando la struttura DJango di Python, che implementa gli instradamenti URL sotto forma di funzioni.
L'SDK Python richiede una variabile JSON caricata con le informazioni di connessione di Oracle Identity Cloud Service. L'applicazione Web Python utilizza un file config.json
che fornisce le informazioni riportate di seguito.
{ "ClientId" : "123456789abcdefghij", "ClientSecret" : "abcde-12345-zyxvu-98765-qwerty", "BaseUrl" : "https://idcs-abcd1234.identity.oraclecloud.com", "AudienceServiceUrl" : "https://idcs-abcd1234.identity.oraclecloud.com", "scope" : "urn:opc:idm:t.user.me openid", "TokenIssuer" : "https://identity.oraclecloud.com/", "redirectURL": "http://localhost:8000/callback", "logoutSufix":"/oauth2/v1/userlogout", "LogLevel":"INFO", "ConsoleLog":"True" }
Di seguito è riportata una breve spiegazione di ciascun attributo obbligatorio per questo SDK.
Tabella - Attributi richiesti per l'SDK Python
Nome attributo | Descrizione attributo |
---|---|
ClientId |
Il valore dell'ID client generato dopo la registrazione dell'applicazione Web utilizzando la console di Oracle Identity Cloud Service. |
ClientSecret |
Il valore del segreto client generato dopo la registrazione dell'applicazione Web mediante la console di Oracle Identity Cloud Service. |
BaseUrl |
L'URL del dominio dell'istanza di Oracle Identity Cloud Service. |
AdminServiceUrl |
URL del nome dominio dell'istanza di Oracle Identity Cloud Service. In genere è uguale a BaseUrl .
|
TokenIssuer |
Mantenere il valore come presentato qui. |
scope |
L'ambito controlla i dati a cui l'applicazione può accedere o elaborare per conto dell'utente. Poiché l'applicazione utilizza l'SDK per l'autenticazione, l'ambito è openid . L'applicazione implementa anche il caso d'uso get user details , per il quale è necessario utilizzare anche l'ambito urn:opc:idm:t.user.me .
|
ConsoleLog |
Abilita il log SDK. |
LogLevel |
Indica il livello di log del kit SDK. |
Gli attributi logoutSufix
e redirectURL
vengono entrambi utilizzati dall'applicazione. Pertanto, non sono richiesti dall'SDK.
L'applicazione implementa la definizione della funzione auth
, che mappa l'URL /auth
. Quando un utente esegue l'autenticazione con Oracle Identity Cloud Service, il browser invia una richiesta a questo URL.
La funzione auth
inizializza Authentication Manager, utilizza gli attributi di configurazione JSON come parametri, utilizza l'SDK per generare l'URL del codice di autorizzazione Oracle Identity Cloud Service, quindi reindirizza il browser a questo URL.
#Loading the SDK Python file. from . import IdcsClient #Function used to load the configurations from the config.json file def getOptions(): fo = open("config.json", "r") config = fo.read() options = json.loads(config) return options # Definition of the /auth route def auth(request): #Loading the configurations options = getOptions() print "config.json file = %s" % options #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(options) #Using Authentication Manager to generate the Authorization Code URL, passing the #application's callback URL as parameter, along with code value and code parameter. url = am.getAuthorizationCodeUrl(options["redirectURL"], options["scope"], "1234", "code") #Redirecting the browser to the Oracle Identity Cloud Service Authorization URL. return HttpResponseRedirect(url)
Per generare l'URL del codice di autorizzazione vengono utilizzati i parametri riportati di seguito.
Tabella - Parametri utilizzati per generare l'URL del codice di autorizzazione
Nome parametro | Descrizione del parametro |
---|---|
options["redirectURL"] |
Dopo la corretta connessione, Oracle Identity Cloud Service reindirizza il browser Web dell'utente a questo URL. Questo URL deve corrispondere a quello che verrà configurato per l'applicazione sicura nella console di Oracle Identity Cloud Service. |
options["scope"] |
L'ambito di autenticazione OAuth o OpenID Connect. Questa applicazione richiede solo l'autenticazione openid .
|
state |
L'applicazione Web utilizza questo codice per verificare se è possibile stabilire una comunicazione con Oracle Identity Cloud Service. Il parametro è definito dal protocollo OAuth. |
response_type |
Il valore richiesto dal tipo di privilegio del codice di autorizzazione (ad esempio, code ).
|
La funzione callback
utilizza il parametro URL del codice di autorizzazione per richiedere un token di accesso e un token ID. Entrambi i token vengono memorizzati nella sessione utente per uso futuro.
# Definition of the /callback route def callback(request): code = request.GET.get('code') #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(getOptions()) #Using the Authentication Manager to exchange the Authorization Code to an Access Token. ar = am.authorizationCode(code) #Get the access token as a variable access_token = ar.getAccessToken() id_token = ar.getIdToken() #Validating id token to acquire information such as UserID, DisplayName, list of groups #and AppRoles assigned to the user id_token_verified = am.verifyIdToken(id_token) displayname = id_token_verified.getDisplayName() #The application then adds these information to the User Session. request.session['access_token'] = access_token request.session['id_token'] = id_token request.session['displayname'] = displayname #Rendering the home page and adding displayname to be printed in the page. return render(request,'sampleapp/home.html', {'displayname': displayname})
La funzione myProfile
accede al token ID dell'utente, chiama la funzione AuthenticationManager
verifyIdToken
per recuperare le informazioni dell'utente quali nome, gruppi e applicazioni assegnate all'utente, come testo JSON, quindi invia le informazioni a myProfile.html
per il rendering.
# Definition of the /myProfile route def myProfile(request): #Getting the Access Token value from the session access_token = request.session.get('access_token', 'none') if access_token == 'none': #If the access token isn't present redirects to login page. return render(request, 'sampleapp/login.html') else: #If the access token is present, validates the id token to acquire #information such as UserID, DisplayName, list of groups and AppRoles assigned to the user. #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(getOptions()) id_token = request.session.get('id_token', 'none') id_token_verified = am.verifyIdToken(id_token) #Getting the user details in json format. jsonProfile = id_token_verified.getIdToken() #Getting User information to send to the My Profile page. displayname = request.session.get('displayname', 'displayname') #Redenring json to be used in the html page. json_pretty = json.dumps(jsonProfile, sort_keys=True, indent=2) context = { 'displayname': displayname, "json_pretty": json_pretty, } #Rendering the content of the My Profile Page. return render(request, 'sampleapp/myProfile.html', context)
Per disconnettere l'utente da Single Sign-On tra l'applicazione e Oracle Identity Cloud Service, l'applicazione Web Python implementa la funzione logout
. Questa funzione cancella gli attributi della sessione utente impostati in precedenza, quindi reindirizza l'utente all'URL di logout OAuth di Oracle Identity Cloud Service. Questo URL viene impostato nel file config.json
come parametro logoutSufix
.
# Definition of the /logout route def logout(request): #Getting the Access Token value from the session access_token = request.session.get('access_token', 'none') if access_token == 'none': #If the access token isn't present redirects to login page. return render(request, 'sampleapp/login.html') else: options = getOptions() url = options["BaseUrl"] url += options["logoutSufix"] url += '?post_logout_redirect_uri=http%3A//localhost%3A8000&id_token_hint=' url += request.session.get('id_token', 'none') #Clear session attributes del request.session['access_token'] del request.session['id_token'] del request.session['displayname'] #Redirect to Oracle Identity Cloud Service logout URL. return HttpResponseRedirect(url)