3.2. Autenticação em Python
1 - Crie um arquivo de configuração 'settings.json' contendo as informações do cliente, scopes, redirect e os endpoints do autorizador e da api:
{
"issuer": "https://auth.plugntrade.com.br/PnTAuthorizationServerProvider",
"api_endpoint": "https://webbrokerhml.plugntrade.com.br:8080/Robot/robothub",
"scope": "robot_signalr_api",
"client_id": meu_client_id,
"redirect_uri": "http://localhost:4200/callback"
}
}
2 - Crie um cliente com as configurações do arquivo settings.json:
_config = Config('settings.json').load_config()
_client = Client(_config)
3 - Monte a url para login:
scopes = _client.config['scope']
state = tools.generate_random_string()
session['state'] = state
session['code_verifier'] = code_verifier = tools.generate_random_string(100)
session["flow"] = "code"
nonce = tools.generate_random_string()
session["nonce"] = nonce
request_args = {'scope': scope,
'response_type': "code",
'client_id': self.config['client_id'],
'state': state,
'code_challenge': code_challenge,
'code_challenge_method': "S256",
'redirect_uri': self.config.get('redirect_uri'),
'nonce': nonce}
delimiter = "?" if self.config['authorization_endpoint'].find("?") < 0 else "&"
login_url = "%s%s%s" % (self.config['authorization_endpoint'], delimiter,
urlencode(request_args))
print("Redirect to %s" % login_url)
Uma vez na nossa tela de login, digite usuário, senha e selecione a corretora “SIMULACAO”:
Tela de autenticação de usuário no ambiente de simulação PNT
Clicando no botão de Login, com as credenciais válidas, o usuário será redirecionado à página definida como "redirect_uri" no arquivo 'settings.json'. Sendo assim, o usuário terá acesso a um access token que lhe permitirá iniciar a conexão com o nossa API SignalR WebBroker.
4 - Obtenção do access token:
token_data = _client.get_token(request.args['code'], session["code_verifier"].decode())
user = UserSession()
if 'access_token' in token_data:
user.access_token = token_data['access_token']