Fluxo de trabalho de concessão do código de autorização
A concessão de código de autorização OAuth é um fluxo seguro e amplamente usado para aplicativos da Web, móveis ou desktop que acessam dados do usuário com o consentimento do usuário. Ele oferece suporte a clientes privados (usando um segredo de cliente) e clientes públicos (usando PKCE).
Antes de Iniciar
Função necessária: oauth_admin, mi_admin, admin
Por Que e Quando Desempenhar Esta Tarefa
Esta coleção de tópicos fornece informações sobre como uma aplicação cliente pode usar o fluxo de concessão de código de autorização para obter um token da ServiceNow e fazer chamadas de API com esse token. Clientes privados usam segredo do cliente, enquanto os clientes públicos usam desafio de código PKCE.
Procedimento
-
Faça login na aplicação cliente.
O usuário inicia o processo de login na interface da aplicação cliente.
-
Inicie a solicitação de autorização.
O cliente redireciona o usuário para o endpoint de autorização da ServiceNow. O método de iniciar a solicitação de autorização depende do tipo de cliente: Público ou Privado.
- Clientes públicos
-
Clientes públicos (exemplo: Aplicações móveis ou de página única) não podem armazenar com segurança um segredo do cliente. Portanto, eles devem usar Chave de prova para troca de código (PKCE) para aprimorar a segurança.
- Na solicitação de autorização, inclua Desafio de código PKCE e especifique método de desafio de código .
- Durante a solicitação de token, o cliente deve enviar o. verificador de código validar o código de autorização.
- Execute uma solicitação GET para o endpoint de autorização com os seguintes parâmetros:
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.doTabela 1. Parâmetros de solicitação de autorização (cliente público - PKCE) Parâmetro Necessários Descrição response_typeSim Defina o valor como códigopara iniciar o fluxo do código de autorização.client_idSim O identificador exclusivo da sua aplicação cliente. FORMATO: YOUR_CLIENT_ID
redirect_uriSim O URI para o qual a ServiceNow envia o código de autorização. Exemplo: https://yourapp.com/callback
code_challengeSim Hash SHA-256 codificado em base64url do verificador de código. Isso é usado como parte do fluxo de PKCE. code_challenge_methodSim Especifica o método de transformação usado para o desafio de código. Definido como S256.scopeOpcional Uma lista delimitada por espaços de escopos solicitados. Exemplo:
incident_read incident_write.estadoSim Um valor gerado pelo cliente usado para evitar ataques CSRF. O valor é retornado inalterado no URI de redirecionamento, permitindo que o cliente o valide. Nota:A partir da versão Madrid, a propriedade do sistemaglide.oauth.state.parameter.obrigatórioexige o uso doestadoParâmetro nas solicitações OAuth. .estadoa propriedade está definida comoverdadeiropor padrão, nas novas instâncias, e.opcionalem instâncias atualizadas. Em caso de ausenteestadoa solicitação de autorização falha e o seguinte erro é exibido:Parâmetro de estado ausente na solicitação. - Clientes privados
-
Clientes privados (exemplo: Aplicações do lado do servidor) podem armazenar com segurança um segredo do cliente e não exigem PKCE.
- A solicitação de autorização é iniciada redirecionando o usuário para o endpoint de autorização. Nenhum segredo do cliente ou desafio de código PKCE é necessário nesta etapa.
- Durante a solicitação de token, o cliente inclui o. segredo do cliente junto com código de autorização para obter o token de acesso.
- Execute uma solicitação GET para o endpoint de autorização com os seguintes parâmetros:
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.doTabela 2. Parâmetros de solicitação de autorização (segredo cliente-cliente privado) Parâmetro Necessários Descrição response_typeSim Defina o valor como códigopara iniciar o fluxo do código de autorização.client_idSim O identificador exclusivo da sua aplicação cliente. FORMATO: YOUR_CLIENT_ID
redirect_uriSim O URI para o qual a ServiceNow envia o código de autorização. Exemplo: https://yourapp.com/callback
scopeOpcional Uma lista delimitada por espaços de escopos solicitados. Exemplo:
incident_read incident_write.estadoSim Um valor gerado pelo cliente usado para evitar ataques de CSRF (Cross-Site Request Forgery, falsificação de solicitação entre sites). O valor é retornado inalterado no URI de redirecionamento, permitindo que o cliente o valide.
-
Faça login e conceda consentimento de acesso à aplicação cliente.
Faça login em ServiceNow(Ou IdP, se o SSO estiver habilitado) e conceda consentimento de acesso à aplicação cliente.
-
ServiceNow(Ou IdP, se o SSO estiver habilitado) valida as credenciais e. ServiceNow retorna um código de autorização para o cliente.
Após a autenticação bem-sucedida, o navegador é redirecionado para
redirect_urie o código de autorização está incluído na cadeia de caracteres de consulta:https://yourapp.com/callback?code=AUTH_CODE&state=xyz123 -
Inicie a solicitação de autorização.
O cliente redireciona o usuário para o endpoint de autorização da ServiceNow para um token de acesso. O método de iniciar a solicitação de autorização depende do tipo de cliente: Público ou Privado.
- Clientes públicos
-
Clientes públicos (exemplo: Aplicações móveis ou de página única) não podem armazenar com segurança um segredo do cliente. Portanto, eles devem usar Chave de prova para troca de código (PKCE) para aprimorar a segurança.
- Na solicitação de autorização, inclua Desafio de código PKCE e especifique método de desafio de código .
- Durante a solicitação de token, o cliente deve enviar o. verificador de código validar o código de autorização.
- O cliente envia uma solicitação POST para o endpoint de token com os seguintes parâmetros:
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTabela 3. Parâmetros de solicitação de token (cliente público-PKCE) Parâmetro Necessários Descrição grant_typeSim Defina o valor como authorization_codepara trocar o código por um token.códigoSim O código de autorização recebido do endpoint de autorização. redirect_uriSim O URI usado na solicitação de autorização inicial. Exemplo: https://yourapp.com/callback
client_idSim O identificador exclusivo da sua aplicação cliente. code_verifierSim A cadeia de caracteres original usada para gerar o PKCE code_challenge.estadoSim Um valor gerado pelo cliente usado para ajudar a evitar ataques CSRF. O valor é retornado inalterado no URI de redirecionamento, permitindo que o cliente o valide. - Clientes privados
-
Clientes privados (exemplo: Aplicações do lado do servidor) podem armazenar com segurança um segredo do cliente e não exigem PKCE.
- A solicitação de autorização é iniciada redirecionando o usuário para o endpoint de autorização. Nenhum segredo do cliente ou desafio de código PKCE é necessário nesta etapa.
- Durante a solicitação de token, o cliente inclui o. segredo do cliente junto com código de autorização para obter o token de acesso.
- Execute uma solicitação POST para o endpoint de autorização com os seguintes parâmetros:
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTabela 4. Parâmetros de solicitação de token (segredo cliente-cliente privado) Parâmetro Necessários Descrição grant_typeSim Defina o valor como authorization_codepara trocar o código por um token.códigoSim O código de autorização recebido do endpoint de autorização. redirect_uriSim O URI usado na solicitação de autorização inicial. Exemplo: https://yourapp.com/callback
client_idSim O identificador exclusivo da sua aplicação cliente. client_secretSim O segredo do cliente usado para autenticar com o endpoint do token. estadoSim Um valor gerado pelo cliente usado para ajudar a evitar ataques CSRF. O valor é retornado inalterado no URI de redirecionamento, permitindo que o cliente o valide.
-
Acesse ServiceNow APIs com o token de acesso.
- Exemplo:
- Faça uma solicitação GET para as APIs usando o token de acesso. Inclua o token de acesso no
Autorizaçãocabeçalho.
Method: GET End Point: https://<servicenow_base_url>/api/now/incident Authorization: Bearer YOUR_ACCESS_TOKEN -
Renove o token de acesso se ele tiver expirado.
Faça uma solicitação POST para atualizar o token de acesso (somente clientes privados) com os seguintes parâmetros:
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTabela 5. Atualizar parâmetros de solicitação de token (cliente privado) Parâmetro Necessários Descrição grant_typeSim Defina o valor como refresh_tokenpara solicitar um novo token de acesso.refresh_tokenSim O token de atualização emitido anteriormente pelo endpoint do token. client_idSim O identificador exclusivo da sua aplicação cliente. client_secretSim O segredo do cliente usado para autenticar com o endpoint do token.