Saiba Mais sobre Autenticação entre Aplicativos Python e o Oracle Identity Cloud Service
Você está pronto para aprender sobre autenticação entre aplicativos Web Python e o Oracle Identity Cloud Service. Isso inclui compreender o seguinte:
-
Casos de uso para usar um SDK com um aplicativo Python para autenticação com o Oracle Identity Cloud Service.
-
O fluxo de autenticação de três etapas suportado pelo Oracle Identity Cloud Service para o Python SDK
-
Métodos e funções do Python SDK
Saiba Mais Sobre Fluxos de Autenticação de Três Etapas
O Oracle Identity Cloud Service suporta o fluxo de autenticação de três etapas para o Python SDK. Neste fluxo, os usuários interagem diretamente com o Oracle Identity Cloud Service. Depois que um usuário acessa, o Oracle Identity Cloud Service emite um código de autorização que o SDK troca por um token de acesso do usuário. Esse token de acesso pode ser usado pelo aplicativo Python para conceder aos usuários acesso aos recursos protegidos no aplicativo. O fluxo de três etapas usa o tipo de concessão de código de autorização.
Para maior segurança, a Oracle recomenda que você use fluxos de três etapas para integrar seus aplicativos Web Python com o Oracle Identity Cloud Service para autenticação. Usando o tipo de concessão de código de autorização, você também pode acessar outros aplicativos protegidos pelo Oracle Identity Cloud Service sem precisar se autenticar novamente.
Saiba Mais Sobre os Principais Casos de Uso para Usar um SDK com um Aplicativo Python
O aplicativo web Python implementa dois casos de uso: um para autenticar usuários e o outro para acessar informações detalhadas sobre o usuário que está conectado.
Os diagramas de fluxo de dados a seguir ilustram o fluxo de eventos, chamadas e respostas entre o navegador da Web, o aplicativo da Web e o Oracle Identity Cloud Service para cada caso de uso.
Figura - Caso de Uso 1: Autenticação do Usuário

Descrição de "Figura - Caso de Uso 1: Autenticação do Usuário"
O fluxo de dados acontece desta forma:
-
O usuário solicita um recurso protegido.
-
O módulo de autenticação usa o SDK para gerar um URL de código de autorização de solicitação para o Oracle Identity Cloud Service e enviar esse URL como resposta de redirecionamento para o Web browser.
-
O navegador da Web chama o URL.
-
A página de Acesso ao Oracle Identity Cloud Service é exibida.
-
O usuário envia suas credenciais de acesso ao Oracle Identity Cloud Service.
-
Depois que o usuário faz log-in com sucesso, o Oracle Identity Cloud Service cria uma sessão para o usuário e emite um código de autorização.
-
O aplicativo Web faz uma chamada de back-end (ou servidor para servidor) para trocar o código de autorização por um token de acesso do usuário.
-
O Oracle Identity Cloud Service emite um token de acesso e um token de id.
-
Uma sessão é estabelecida e o usuário é redirecionado para a Home page.
-
A Home page do aplicativo Web é exibida.
Figura - Caso de Uso 2: Obter Detalhes do Usuário

Descrição de "Figura - Caso de Uso 2: Obter Detalhes do Usuário"
O fluxo de dados acontece desta forma:
-
O usuário solicita o recurso
/myProfile
. -
O aplicativo Web usa o SDK do Oracle Identity Cloud Service para validar o token de id.
-
Os dados que retornam da validação do token de id contêm detalhes do usuário no formato de um objeto JSON.
-
A página Meu Perfil renderiza o objeto JSON como conteúdo HTML.
Saiba Mais Sobre Métodos e Funções do Python SDK
O Python SDK está disponível como dois arquivos python, IdcsClient.py
e Constants.py
, que você deve incluir em seu aplicativo Web.
Esses arquivos python dependem de bibliotecas de terceiros que também devem ser incluídas em seu aplicativo. Para incluí-los, abra o arquivo zip do SDK, extraia os arquivos README.txt
e requirements.txt
para uma pasta temporária e execute o comando pip install -r requirements.txt
.
Um aplicativo web de amostra foi desenvolvido usando o framework Python DJango, que implementa rotas de URL na forma de funções.
O SDK para Python requer uma variável JSON carregada com informações de conexão do Oracle Identity Cloud Service. O aplicativo Web Python usa um arquivo config.json
que fornece as informações a seguir.
{ "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" }
Veja abaixo uma breve explicação de cada atributo necessário para este SDK:
Tabela - Atributos Obrigatórios para o Python SDK
Nome do Atributo | Descrição do Atributo |
---|---|
ClientId |
O valor do ID do cliente gerado depois que você registra o aplicativo Web usando a console do Oracle Identity Cloud Service. |
ClientSecret |
O valor do segredo do cliente gerado depois que você registra o aplicativo Web usando a console do Oracle Identity Cloud Service. |
BaseUrl |
O URL de domínio da sua instância do Oracle Identity Cloud Service. |
AdminServiceUrl |
O URL do nome do domínio da sua instância do Oracle Identity Cloud Service. Geralmente é o mesmo que BaseUrl .
|
TokenIssuer |
Mantenha o valor conforme apresentado aqui. |
scope |
O escopo controla os dados que o aplicativo pode acessar ou processar em nome do usuário. Como o aplicativo usa o SDK para autenticação, o escopo é openid . O aplicativo também implementa o caso de uso get user details , para o qual você também deve usar o escopo urn:opc:idm:t.user.me .
|
ConsoleLog |
Ativa o log do SDK. |
LogLevel |
Indica o nível de log do SDK. |
Os atributos logoutSufix
e redirectURL
são usados pelo aplicativo. Portanto, elas não são exigidas pelo SDK.
O aplicativo implementa a definição da função auth
, que mapeia o URL /auth
. Quando um usuário faz a autenticação com o Oracle Identity Cloud Service, o browser faz uma solicitação a esse URL.
A função auth
inicializa o Authentication Manager, usa os atributos de configuração do JSON como parâmetros, usa o SDK para gerar o URL do código de autorização do Oracle Identity Cloud Service e, em seguida, redireciona o browser para esse 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)
Os seguintes parâmetros são usados para gerar o URL do código de autorização:
Tabela - Parâmetros usados para gerar o URL do código de autorização
Nome do Parâmetro | Descrição do Parâmetro |
---|---|
options["redirectURL"] |
Após o acesso bem-sucedido, o Oracle Identity Cloud Service redireciona o Web browser do usuário para esse URL. Esse URL deve corresponder ao que você configurará para o aplicativo confiável na console do Oracle Identity Cloud Service. |
options["scope"] |
O escopo de autenticação OAuth ou OpenID Connect. Este aplicativo requer apenas autenticação openid .
|
state |
O aplicativo Web usa esse código para verificar se a comunicação pode ser estabelecida com o Oracle Identity Cloud Service. O parâmetro é definido pelo protocolo OAuth. |
response_type |
O valor exigido pelo tipo de concessão do código de autorização (por exemplo, code ).
|
A função callback
usa o parâmetro de URL do código de autorização para solicitar um token de acesso e um token de id. Ambos os tokens são armazenados na sessão do usuário para 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})
A função myProfile
acessa o token de id do usuário, chama a função AuthenticationManager
verifyIdToken
para recuperar informações do usuário, como nome, grupos e aplicativos designados ao usuário, como texto JSON e, em seguida, envia as informações para o myProfile.html
para renderização.
# 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)
Para desconectar o usuário do sign-on único entre o aplicativo e o Oracle Identity Cloud Service, o aplicativo Web Python implementa a função logout
. Essa função limpa os atributos da sessão do usuário definidos anteriormente e, em seguida, redireciona o usuário para o URL de log-out OAuth do Oracle Identity Cloud Service. Esse URL é configurado no arquivo config.json
como o parâmetro 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)