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.
- Preencha os pré-requisitos da identidade autônoma.
- Gere um JWT de atestado do cliente.
- Configure um aplicativo cliente externo do Salesforce.
- Configurar as configurações do Experience Cloud.
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_sessione 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.
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.
| 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.
| 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
|
recaptcha
|
Obrigatório se estas condições se aplicam a você:
|
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ê:
|
Um objeto JSON contendo estes subparâmetros.
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 Se Se |
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.
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.
| 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.
| 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 Se o valor |
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â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.
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.
