Loading
Identificar seus usuários e gerenciar acesso
OAuth 2.0 para aplicativos de primeira parte: Fluxo de registro autônomo para clientes privados

OAuth 2.0 para aplicativos de primeira parte: Fluxo de registro autônomo para clientes privados

Para configurar um processo de registro de usuário autônomo para um aplicativo fora da plataforma desenvolvido pela sua empresa, use esse fluxo, que implementa o protocolo padrão de rascunho OAuth 2.0 para aplicativos de primeira parte. Esse fluxo tem suporte apenas para clientes privados, como aplicativos cliente-servidor. Com esse fluxo, você pode controlar totalmente a experiência de registro de front-end em seu aplicativo de primeira parte enquanto o Salesforce lida com o trabalho de back-end de autenticação de usuários e conceder acesso a recursos protegidos. Esse fluxo tem suporte apenas para clientes privados, como aplicativos cliente-servidor, e tem suporte apenas para usuários externos.

Edições obrigatórias

Disponível em: Salesforce Classic e Lightning Experience
Disponível em: Enterprise, Unlimited e Developer Editions

Para configurar o registro autônomo para um cliente privado, você também pode usar essa versão do Fluxo de credenciais e código de autorização, que implementa APIs de identidade autônoma. Ambos os fluxos realizam o mesmo caso de uso: registro para um aplicativo fora da Salesforce Platform. Porém, há algumas diferenças importantes a serem consideradas.

OAuth para aplicativos de primeira parte APIS de identidade autônoma
Suportado apenas para clientes privados. Suportado para clientes públicos e privados.
Está em conformidade com o projeto de protocolo padrão OAuth 2.0 para solicitações de primeira parte. Fluxo proprietário do Salesforce criado com base no padrão OAuth 2.0.
Suportado apenas para a estrutura de aplicativo cliente externo do Salesforce. Além disso, a única maneira de definir as configurações do aplicativo cliente externo para esse fluxo é por meio da API de metadados. Suportado tanto para o aplicativo cliente externo do Salesforce quanto para estruturas de aplicativo conectado.
Por segurança, esse fluxo sempre requer um JWT de atestado do cliente. O Salesforce usa o JWT de atestado do cliente para validar se o aplicativo foi desenvolvido pela sua empresa. Para segurança, requer autenticação ou reCAPTCHA, mas não JWT de atestado do cliente.

Antes de configurar esse fluxo, conclua estas etapas.

Esta é uma visão geral de como o fluxo funciona.

  • Etapa 1: um usuário final abre seu aplicativo de primeira parte e clica em Registrar.
  • Etapa 2: no seu aplicativo, você exibe nativamente um formulário de registro para coletar dados do usuário. Você projeta esse formulário e personaliza as informações que deseja coletar.
  • Etapa 3: o usuário insere suas informações no seu aplicativo. Por exemplo, ele insere seu nome de usuário, senha e primeiro nome.
  • Etapa 4: seu aplicativo define um JWT de atestado do cliente. Também gera parâmetros para a extensão Chave de comprovação para troca de código (PKCE).
  • Etapa 5: para inicializar o registro, seu aplicativo envia as informações do usuário para o ponto de extremidade services/oauth2/v1/authorization_challenge em seu site do Experience Cloud. A solicitação inclui um JWT de atestado do cliente.
  • Etapa 6: para confirmar que seu aplicativo de primeira parte enviou a solicitação, o Salesforce valida o JWT de atestado do cliente e, em seguida, valida os outros parâmetros enviados na solicitação.
  • Etapa 7: quando a solicitação for bem-sucedida, o Salesforce retornará uma resposta com uma auth_session. A resposta indica que o Salesforce inicializou o registro e enviou uma senha de uso único (OTP) ao usuário.
  • Etapa 8: no seu aplicativo, você exibe nativamente um formulário de verificação. Você escolhe a aparência desse formulário.
  • Etapa 9: o usuário recebe sua OTP e a insere no formulário de verificação.
  • Etapa 10: para solicitar um código de autorização, seu aplicativo envia outra solicitação POST ao ponto de extremidade services/oauth2/v1/authorization_challenge. A solicitação inclui o auth_session e a OTP.
  • Etapa 11: se a solicitação for bem-sucedida, o Salesforce retornará um código de autorização ao seu aplicativo e encerrará a auth_session.
  • Etapa 12: para trocar o código por um token de acesso, seu aplicativo de primeira parte envia uma solicitação ao ponto de extremidade /services/oauth2/token.
  • Etapa 13: o Salesforce retorna uma resposta de token contendo o token de acesso.
  • Etapa 14: seu aplicativo de primeira parte processa a resposta do token e cria a sessão do usuário.
  • Etapa 15: o usuário agora está conectado e ele executa uma ação no seu aplicativo que inicia uma solicitação para dados do Salesforce.
  • Etapa 16: seu aplicativo faz uma solicitação autenticada para um ponto de extremidade protegido do Salesforce, como uma API do Salesforce.
  • Etapa 17: o usuário agora pode acessar seus dados protegidos em seu aplicativo.

Etapa 1: o usuário abre o aplicativo de primeira parte e clica em Registrar

Um usuário abre seu aplicativo de primeira parte e clica em um link de registro. Ou eles clicam em um link para acessar um recurso que requer registro.

Etapa 2: o aplicativo de primeira parte exibe o formulário de registro

Em seu aplicativo de primeira parte, você exibe nativamente um formulário de registro para coletar informações sobre o usuário. Você controla tudo sobre esse formulário, incluindo a aparência e as informações do usuário que deseja coletar.

Há algumas considerações sobre quais informações você deseja coletar dos usuários. Quando seu aplicativo envia informações do usuário para o ponto de extremidade do desafio de autorização, o Salesforce verifica se há um endereço de email, um nome de usuário, um sobrenome e uma senha. Você pode coletar essas informações dos usuários ou gerá-las automaticamente, mas elas devem ser incluídas na sua solicitação POST. Ao decidir quais informações incluir, certifique-se de coletar um endereço de email ou número de telefone para que o usuário possa confirmar sua identidade.

Etapa 3: o usuário insere suas informações

No formulário de registro do aplicativo, o usuário insere suas informações.

Etapa 4: O aplicativo de primeira parte define um JWT de atestado do cliente e gera valores de code_verifier e code_challenge para PKCE

O aplicativo lembra um JWT de atestado do cliente.

O aplicativo também gera valores para os parâmetros de PKCE usados para verificar o código de autorização.

Nota
Nota Recomendamos enfaticamente que você sempre implemente a PKCE para esse fluxo. Caso contrário, você não obterá seus benefícios de segurança.

Para obter mais informações sobre a PKCE, consulte a especificaçãoRFC 7636: Chave de prova para troca de código por clientes públicos da OAuth fornecida pela Internet Engineering Task Force (IETF).

A especificação PKCE definida em RFC 7636 também inclui um parâmetro code_challenge_method opcional que pode ser enviado na solicitação de autorização. O Salesforce ignora qualquer valor enviado nesse parâmetro e o padrão é SHA256.

Etapa 5: o aplicativo envia a solicitação inicial ao ponto de extremidade do desafio de autorização

No navegador, seu aplicativo envia uma solicitação POST ao ponto de extremidade services/oauth2/v1/authorization_challenge em seu site do Experience Cloud.

Inclua esse cabeçalho na sua solicitação, se necessário.

Solicitação de registro inicial: Cabeçalhos
Cabeçalho Obrigatório? Descrição
Authorization: Bearer Necessário se você habilitar Requer autenticação para acessar esta API na seção Registro autônomo na página Login e registro do Experience Cloud. Contém um token de acesso emitido para um usuário de integração interno. Para obter o token de acesso, você pode usar qualquer fluxo OAuth padrão compatível com o Salesforce. Certifique-se de atribuir o escopo user_registration_api ao seu aplicativo conectado ou ao aplicativo cliente externo ou passá-lo como um parâmetro durante o fluxo.

Inclua estes parâmetros no corpo da solicitação.

Solicitação de registro inicial: Parâmetros de corpo
Parâmetro Obrigatório? Descrição
password Sim. A senha do usuário. A senha estará sujeita a quaisquer políticas de senha configuradas para o perfil ou a organização.
userdata Sim. Mesmo que você não capture essas informações do usuário, precisará gerá-las automaticamente e passá-las no parâmetro userdata.

Contém todas as informações necessárias sobre o usuário. No mínimo, o Salesforce exige estas informações no parâmetro userdata.

  • username
  • lastName
  • email address
recaptcha

Obrigatório se estas condições se aplicam a você:

  • Você habilitou Exigir reCAPTCHA para acessar essa API para registro autônomo nas configurações de Login e registro do Experience Cloud.
  • Você está usando reCAPTCHA v2 ou v3.
Um token criptografado emitido pela API reCAPTCHA do Google quando um usuário conclui um desafio de reCAPTCHA.
recaptchaevent

Obrigatório se estas condições se aplicam a você:

  • Você habilitou Exigir reCAPTCHA para acessar essa API para registro autônomo nas configurações de Login e registro do Experience Cloud.
  • Você está usando o reCAPTCHA Enterprise.

Um objeto JSON contendo estes subparâmetros.

  • token – um token criptografado emitido pela API reCAPTCHA do Google quando um usuário conclui um desafio de reCAPTCHA.
  • siteKey – a chave do site do Google reCAPTCHA.
  • (Opcional)expectedAction– a ação que você espera que o usuário realize para iniciar o reCAPTCHA, como login. Esse parâmetro é mapeado para o parâmetro action do Google.
  • projectId – o ID do projeto do Google.

Para obter mais informações, consulte a documentação do Google reCAPTCHA.

client_assertion Sim. O JWT de atestado do cliente que você gerou, assinado pelo certificado configurado para seu aplicativo cliente externo.
login_type Não. Se você não incluir esse parâmetro, o Salesforce terá como padrão a verificação da identidade do usuário por email. O método usado para verificar a identidade do usuário. O Salesforce oferece suporte a dois valores para o método de verificação: email e sms.
customdata Não. Contém todas as informações personalizadas sobre o usuário que você coleta. Por exemplo, você pode incluir o endereço do usuário.
emailtemplate

Obrigatório para especificar vários modelos de email se a criação de listas de permissão de modelos de email estiver habilitada.

Se você não tiver habilitado a criação de listas de permissão de modelos de email, não poderá incluir este parâmetro.

Se você não incluir esse parâmetro, o Salesforce usará o modelo de email padrão definido em suas configurações do Experience Cloud, independentemente de a lista de permissão estar habilitada ou não. Se não houver um modelo configurado, o Salesforce usará um modelo de email de OTP padrão.

O nome do desenvolvedor do modelo de email personalizado. Esse parâmetro pode incluir apenas um modelo de email da lista de permissão.
code_challenge Obrigatório se você exigisse a PKCE para seu aplicativo cliente externo. Para que os recursos de segurança desse fluxo funcionem corretamente, recomendamos enfaticamente que você sempre exija a PKCE.

Especifica o valor de hash SHA256 do valor code_verifier na solicitação de token. Defina esse parâmetro para ajudar a prevenir ataques de interceptação de código de autorização. O valor deve ser o URL codificado com Base-64 conforme definido em https://tools.ietf.org/html/rfc4648#section-5

Se code_challenge for incluído na solicitação de autorização e code_verifier for incluído na solicitação de token, o Salesforce comparará os dois valores. Se code_challenge for inválido ou não corresponder, o login falhará com o código de erro invalid_request.

Se code_challenge for fornecido na solicitação de autorização, mas não houver code_verifier na solicitação de token, o login falhará com o código de erro de invalid_grant.

Aqui está um exemplo de solicitação de registro inicial.

POST /services/oauth2/v1/authorization_challenge? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com
{
    "userdata": {
        "firstname": "Janice"
        "lastname": "Edwards"
        "email": "janice.edwards@example.com"
        "username": "jedwards@myapp.com"
        }
    "customdata": {
        "mobilePhone"="<mobile phone number>"
        }
    "password":"*********"
    "recaptcha": "*******"
    "login_type": "email"
    "emailtemplate": "unfiled$public/SalesNewCustomerEmail"
    "client_assertion": "Y2xpZW50YXNzZXJ0aW9u..."
}

Etapa 6: o Salesforce valida a solicitação

O Salesforce primeiro tenta validar o JWT de atestado do cliente validando se a assinatura passada no parâmetro client_asssertion corresponde à assinatura do certificado configurado para o aplicativo cliente externo.

Se o JWT de atestado do cliente não for válido, o Salesforce retornará um erro invalid_attestation e você deverá reenviar a solicitação com todos os parâmetros enviados originalmente. Aqui está um exemplo de resposta de erro.

Se o JWT de atestado do cliente for válido, mas houver outros problemas com a solicitação, o Salesforce retornará uma resposta de erro especificando o que estava errado com a solicitação. A resposta também inclui um parâmetro auth_session que permanece válido por 5 minutos após ser emitido. Durante o período em que a auth_session é válida, você pode usá-la para reenviar a solicitação. Nas versões corrigidas que você reenvia, inclua apenas os valores corrigidos para os parâmetros que causaram a falha da solicitação. Você também deve reenviar a password a cada solicitação, pois o Salesforce não a armazena. Porém, para outros parâmetros, se eles não causarem a falha da solicitação, você poderá ignorá-los. Eles já estão representados por auth_session.

Nota
Nota Os parâmetros reCAPTCHA não são vinculados à auth_session, mas você pode reenviar a solicitação sem eles, a menos que causem a falha da solicitação.

Por exemplo, se o JWT de certificação do cliente for válido, mas a solicitação falhar porque o nome de usuário estava incorreto, reenvie uma solicitação que inclua apenas a auth_session, username e password.

Etapa 7: o Salesforce envia uma OTP ao usuário

Se a solicitação for bem-sucedida, o Salesforce ainda retornará uma resposta de erro porque ainda não pode conceder o código de autorização. Porém, dessa vez, a resposta de erro indica que o login foi inicializado e que o Salesforce enviou uma OTP para o endereço de email ou número de telefone do usuário. Para confirmar que a solicitação foi bem-sucedida, procure o código de erro login_initialized e o estado otp_sent. A resposta também inclui um parâmetro auth_session, que é importante para a próxima etapa.

Aqui está um exemplo de resposta.

HTTP/1.1 403 Forbidden
Content-Type: application/json
Cache-Control: no-store

{
  "error": "authorization_required",
  "auth_session": "uY29tL2F1dGhlbnRpY",
  "error_code": "login_initialized",
  "login_status": {
    "type": "SMS",
    "state": "otp_sent",
    "displayData": "+120******58"
   }
}

Etapa 8: seu aplicativo exibe nativamente um formulário de verificação

Em seu aplicativo de primeira parte, você exibe um formulário de verificação em que o usuário final pode inserir sua OTP. A aparência desse formulário depende totalmente de você.

Etapa 9: o usuário insere a OTP no formulário de verificação

O usuário recebe a OTP e a insere no formulário de verificação no seu aplicativo de primeira parte.

Etapa 10: seu aplicativo solicita um código de autorização

Para solicitar um código de autorização, seu aplicativo envia a auth_session e o OTP que o usuário inseriu para o ponto de extremidade de desafio de autorização usando outra solicitação POST para o services/oauth2/v1/authorization_challenge Essa solicitação não tem cabeçalhos obrigatórios. Inclua estes parâmetros no corpo da solicitação.

Solicitação de código de autorização: Parâmetros de corpo
Parâmetro Obrigatório? Descrição
auth_session Sim. Representa a tentativa de login. Use o valor de auth_session que você recebeu na resposta da primeira solicitação ao ponto de extremidade de desafio de autorização. Use auth_session da solicitação que indica que o login foi inicializado e a OTP foi enviada.
login_otp Sim. A OTP que o usuário final inseriu no formulário de verificação do seu aplicativo.

Aqui está um exemplo de solicitação.

POST /authorize HTTP/1.1
Host: MyExperienceCloudSite.my.site.com

auth_session=uY29tL2F1dGhlbnRpY*
login_otp=<otp_from_sms>

Etapa 11: o Salesforce retorna um código de autorização

Se a OTP estiver correta e a solicitação de auth_session for válida, o Salesforce retornará um código de autorização e encerrará a auth_session. Aqui está um exemplo de resposta de código de autorização.

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store

{
  "authorization_code": "uY29tL2F1d******"
}

Etapa 12: seu aplicativo troca o código de autorização para um token de acesso

Depois de obter o código de autorização, seu aplicativo envia uma solicitação ao ponto de extremidade do token do Salesforce.

Essa solicitação não tem cabeçalhos. Inclua estes parâmetros no corpo da solicitação.

Solicitação de token: Parâmetros de corpo
Parâmetro Obrigatório? Descrição
code Sim. O servidor de autorização cria um código de autorização, que é um token de vida curta, e o passa ao cliente após a autenticação bem-sucedida. O cliente envia o código de autorização ao servidor de autorização para obter um token de acesso e, opcionalmente, um token de atualização.
client_id Sim. A chave de consumidor do aplicativo cliente externo.
client_secret Sim. O segredo do consumidor do aplicativo cliente externo. Nesse fluxo, ele atua como uma senha que o aplicativo usa para acessar o Salesforce.
redirect_uri Sim. O URL para o qual os usuários são redirecionados depois de uma autenticação bem-sucedida. O URI de redirecionamento deve corresponder a um dos valores no campo URL de retorno do aplicativo cliente externo. Caso contrário, a aprovação falhará. Esse valor deve ser codificado por URL.
grant_type Sim. O tipo de validação que o aplicativo pode fornecer para comprovar que é um visitante seguro. Para esse fluxo, o valor deve ser authorization_code.
code_verifier Obrigatório se você exigisse a PKCE para seu aplicativo cliente externo. Para que os recursos de segurança desse fluxo funcionem corretamente, recomendamos enfaticamente que você sempre exija a PKCE.

Especifica 128 bytes de dados aleatórios com alta entropia para dificultar adivinhar o valor do código. Defina esse parâmetro para ajudar a prevenir ataques de interceptação de código de autorização. O valor deve estar codificado com base64url conforme definido em https://datatracker.ietf.org/doc/html/rfc4648#section-5.

Se houver um valor code_verifier na solicitação de token e um valor code_challenge na solicitação de autorização, o Salesforce comparará os dois valores. Se code_verifier for inválido ou não corresponder, o login falhará com o código de erro invalid_grant.

Se o valor code_verifier estiver na solicitação de token, mas não houver valor code_challenge na solicitação de autorização, o login falhará com o código de erro invalid_grant.

Aqui está um exemplo de solicitação de token.

POST services/oauth2/token? HTTP 1.1
Host: MyExperienceCloudSite.my.site.com

code=********&
client_id=**********&
client_secret=*********&
redirect_uri=<callback_URL>&
grant_type=authorization_code&
code_verifier=*******

Etapa 13: o Salesforce concede um token de acesso

Depois de validar as credenciais do aplicativo. O Salesforce retorna um token de acesso. Veja aqui um exemplo de resposta de token de acesso no formato JSON.

{
"access_token":"*******************",
"sfdc_community_url":"https://MyDomainName.my.site.com",
"sfdc_community_id":"0DBxxxxxxxxxxxx",
"signature":"ts6wm/svX3jXlCGR4uu+SbA04M6qhD1SAgVTEwZ59P4=",
"scope":"openid api",
"id_token":"XXXXXX",
"instance_url":"https://yourInstance.salesforce.com",
"id":"https://yourInstance.salesforce.com/id/00Dxxxxxxxxxxxx/005xxxxxxxxxxxx",
"token_type":"Bearer",
"issued_at":"1667600739962"
}

A resposta do token de acesso contém estes parâmetros.

Parâmetros de resposta do token
Parâmetro Obrigatório? Descrição
access_token Sim. Token OAuth que um aplicativo cliente externo usa para solicitar acesso a um recurso protegido em nome do aplicativo cliente. Permissões adicionais na forma de escopos podem acompanhar o token de acesso.
id Sim. Um URL de identidade que pode ser usado para identificar o usuário e consultar mais informações sobre o usuário. Veja os URLs de identidade.
id_token Não. Uma estrutura de dados assinada que contém atributos de usuário autenticado, incluindo um identificador exclusivo para o usuário e um carimbo de data e hora de quando o token foi emitido. Ela também identifica o aplicativo que faz a solicitação. Consulte Especificações do OpenID Connect.
instance_url Sim. Um URL que indica a instância da organização do usuário. Por exemplo, https://yourInstance.salesforce.com/.
issued_at Sim. Um carimbo de data/hora de quando a assinatura foi criada, expresso como o número de milésimos de segundo de 1970-01-01T0:0:0Z UTC.
refresh_token Não. Token obtido do servidor da Web, do agente do usuário ou do fluxo do token do aplicativo híbrido. Este valor é secreto. Tome medidas adequadas para protegê-lo. Esse parâmetro é retornado somente se o aplicativo cliente externo ou aplicativo conectado estiver configurado com um escopo refresh_token.
signature Sim. Assinatura HMAC-SHA256 com codificação Base64 realizada com client_secret. A assinatura pode incluir ID concatenado e valor issued_at, que você pode usar para verificar se o URL da identidade não mudou desde que o servidor o enviou.
sfdc_community_url Sim. O URL do site do Experience Cloud.
sfdc_community_id Sim. O ID do site do Experience Cloud do usuário.
state Não. O estado solicitado pelo cliente. Esse valor será incluído somente se o parâmetro state estiver na string de consulta original.
token_type Sim. Um tipo de token Bearer, que é usado para todas as respostas que incluem um token de acesso.

Etapa 14: o aplicativo cria a sessão do usuário

O aplicativo de primeira parte processa a resposta do token e cria a sessão do usuário.

Etapa 15: o usuário está registrado e executa uma ação no aplicativo

O usuário agora está registrado e conectado. Ele executa uma ação no seu aplicativo que requer acesso a dados do Salesforce. Por exemplo, ele clica em um botão para visualizar seu histórico de reservas de viagem, que é armazenado no Salesforce.

Nota
Nota Ao configurar seu aplicativo cliente externo ou aplicativo conectado para o Fluxo de código e credenciais de autorização, você configura a política Usuários permitidos como Usuários aprovados pelo administrador são pré-autorizados e configura quais perfis ou conjuntos de permissões podem acessar o aplicativo. Com essa política, os usuários acessam o aplicativo sem autorizá-lo, portanto, eles não recebem uma tela de autorização solicitando que eles permitam que o aplicativo acesse seus dados.

Etapa 16: O aplicativo faz uma chamada autenticada para um ponto de extremidade do Salesforce

Para acessar os dados do Salesforce do usuário, o aplicativo usa o token de acesso para fazer uma chamada autenticada para um ponto final do Salesforce protegido, como uma API do Salesforce.

Etapa 17: o usuário pode acessar dados do Salesforce

Agora o cliente pode acessar os dados protegidos do Salesforce em seu aplicativo. Por exemplo, ele pode ver seu histórico de reservas de viagem.

 
Carregando
Salesforce Help | Article