Inscription client dynamique OpenID Connect pour les passerelles API externes
Bien qu'elle ne corresponde pas à un flux d'autorisation typique, vous pouvez utiliser l'inscription client dynamique OpenID Connect pour activer votre instance Salesforce en tant que serveur d'autorisation OAuth indépendant, afin de protéger les ressources hébergées sur une passerelle API externe.
Éditions requises
| Disponible avec : Salesforce Classic et Lightning Experience |
| Disponible avec : Toutes les éditions |
L'inscription client dynamique permet au serveur de ressources d'inscrire directement les applications clientes en tant qu'applications connectées dans Salesforce. Les applications clientes sont des applications externes qui demandent l'accès aux ressources protégées. Pour inscrire les applications clientes en tant qu'applications connectées, le serveur de ressources envoie une demande au serveur d'autorisation. Le serveur d'autorisation vérifie la demande du serveur de ressources et crée l'application connectée, en lui accordant un ID client et un secret client uniques.
Dans le cadre du processus d'autorisation, l'introspection de jeton permet à toutes les applications clientes de vérifier l'état actuel d'un jeton d'accès ou d'actualisation OAuth 2.0. Le serveur de ressources ou les applications connectées envoient l'ID et le secret client de l'application cliente au serveur d'autorisation, initiant un flux d'autorisation OAuth. Dans le cadre de ce flux, le serveur d'autorisation valide, ou introspecte, le jeton d'accès de l'application cliente. Si le jetons accès est actuel et valide, l'accès est accordé à l'application cliente.
Par exemple, vous souhaitez que vos partenaires Salesforce puissent accéder aux données de statut des commandes de façon indépendante. Vous élaborez un service qui expose le statut des commandes sur plusieurs systèmes en les exposant dans une passerelle API, qui est déployée sur la plate-forme Anypoint de MuleSoft. Pour autoriser l'accès protégé à ces données, vous procédez comme suit.
- Vous mettez en œuvre une stratégie d'application de jeton OpenID dans la passerelle API.
- Vous configurez votre instance Salesforce en tant que fournisseur de gestion client sur la plate-forme Anypoint de MuleSoft.
Avec cette configuration, la passerelle API utilise votre instance Salesforce en tant que fournisseur d'autorisation dans le flux d'inscription client dynamique OpenID Connect.
Les étapes de ce flux sont les suivantes.
- Créez une application connectée pour la passerelle API, puis générez un jeton accès initial pour l'application. Salesforce nécessite ce jeton pour authentifier les requêtes d'inscription client dynamique. Consultez Génération d'un jeton d'accès initial.
- Configurez votre passerelle API :
- Mettez en œuvre une stratégie d'application de jeton OpenID.
- Configurez votre instance Salesforce en tant que fournisseur de gestion client.
- Si votre passerelle API l'exige, inscrivez votre rejeton d'accès initial.
- Pour initier le flux, la passerelle API inscrit une application connectée au point de terminaison d'inscription client dynamique Salesforce.
- Une fois l'inscription réussie, Salesforce répond avec les métadonnées de l'application connectée inscrite.
- La passerelle API envoie une requête au point de terminaison d'autorisation Salesforce pour approuver l'application connectée inscrite sur la base du type d'autorisation d'accès qui lui est associé. Une fois la validation réussie, Salesforce génère un jeton d'accès pour l'application connectée inscrite.
- La passerelle API envoie une requête au point de terminaison d'introspection de jeton Salesforce pour valider le jeton d'accès.
- Une fois la validation réussie, la passerelle API autorise l'accès de l'application connectée inscrite aux données protégées.
Inscrire une application connectée
L'application connectée qui représente la passerelle API externe inscrit une nouvelle application cliente en tant qu'application connectée au point de terminaison d'inscription client dynamique de Salesforce. Le format de l'URL du point de terminaison d'inscription client dynamique est https://nomhôte/services/oauth2/register.
Salesforce nécessite que l'application connectée OAuth 2.0 qui effectue la demande fournisse le jeton d'accès initial dans l'en-tête de la demande. Cette exemple présente une requête publiée au point de terminaison d'inscription client dynamique.
POST /services/oauth2/register HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <initial.access.token>
Host: myorg.salesforce.com
{"redirect_uris":["https://client.salesforce.com/redirect.html",
"https://client.salesforce.com/callback","http://localhost"],
"response_types":["code","token","id_token"],
"grant_types":["authorization_code","implicit","refresh_token"],
"application_type":"web",
"contacts":["abc@sf.com","ve7jtb@example.org"],
"client_name","Client Name Example",
"logo_uri":"https://client.salesforce.com/logo.png",
"client_uri":"https://client.salesforce.com/info.html"}Insérez les paramètres suivants dans la demande d'inscription. Pour plus d'informations sur ces paramètres, consultez la section 3.1 Client Registration Request dans OpenID Connect Dynamic Client Registration 1.0 incorporating errata set 1.
| Paramètre | Description |
|---|---|
redirect_url
|
L'URL vers laquelle les utilisateurs sont redirigés après une authentification réussie. L'URI de redirection doit correspondre à l'une des valeurs du champ URL de rappel de l'application connectée. Sinon, l'approbation échoue. L'URI de redirection est accessible dans la page Gérer les applications connectées, de l'application connectée, ou dans la définition de l'application connectée. Cette valeur doit être codée en URL. |
response_types
|
(Facultatif) Les valeurs de réponse OAuth 2.0 auxquelles le client limite lui-même son utilisation. Salesforce ne stocke pas et ne limite pas les types de réponse pour les clients. |
grant_types
|
(Facultatif) Les types d'octroi OAuth 2.0 auxquels le client limite lui-même son utilisation. Salesforce ne stocke pas et ne limite pas les types d'autorisation d'accès pour les clients. |
application_type
|
(Facultatif) Le type de l'application, par exemple native ou web. Salesforce ne stocke pas le type de l'application avec le client. |
contacts
|
(Facultatif) Si vous ne fournissez pas une valeur de contact, Salesforce génère automatiquement un contact par défaut. |
client_name
|
(Facultatif) Si vous ne fournissez pas une valeur de nom de client, Salesforce génère automatiquement un nom de client par défaut. |
scopes
|
(Facultatif) Autorisations qui définissent les types de ressource protégée auxquels l'application connectée peut accéder. Vous attribuez des étendues à une application connectée lors de son élaboration. Elles sont incluses avec les jetons OAuth pendant le flux d'autorisation. Si vous n'incluez pas ce paramètre, toutes les étendues attribuées à l'application connectée sont demandées. Les étendues transmises dans ce paramètre doivent être un sous-ensemble des étendues enregistrées. Pour les paramètres valides, consultez Étendues OAuth. Si vous ne fournissez pas d'étendue, Salesforce ajoute id, api et openid pour le client. Si vous incluez le type d'autorisation d'accès refresh_token dans la requête sans fournir d'étendue, Salesforce ajoute l'étendue refresh_token. |
Salesforce répond avec les métadonnées de l'application connectée inscrite
Une fois l'inscription réussie, Salesforce envoie à la passerelle API une réponse avec client_id, client_secret et toutes les métadonnées enregistrées sur la nouvelle application connectée. Cet exemple montre une réponse de Salesforce à l'application connectée représentant la passerelle API.
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{"client_id":"client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1
uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE",
"client_secret":"client_secret=
1955279925675241571",
"registration_access_token":"00DR00000009GVP!ARQAQE5XuPV7J4GoOu3wvLZjZI_TxoBpeZpRb6d8AVdII6cz
_BY_uu1PKxGeAjkSvO0LpWoL_qfbQWKlXoz1f2ICNiy.6Ndr",
"registration_client_uri":"https://login.salesforce.com/
services/oauth2/register/3MVG9qKMKuRGRcbs8STMW7uUqqf0OP5l1GeQt1qRF6_
UyAqTC1ky0RlpN3L9Z8PSo4nTTTmDzymYy4tEbrKY.",
"client_id_issued_at":1534292303,
"client_secret_expires_at":0,
"token_endpoint_auth_method":"client_secret_post",
"redirect_uris":["https://login.salesforce.com/redirect.html",
"https://client.salesforce.com/callback","http://localhost"],
"response_types":["code","token","id_token"],
"grant_types":["authorization_code","implicit","refresh_token"],
"contacts":["abc@sf.com"],
"client_name":"Client Name Example",
"logo_uri":"https://client.salesforce.com/logo.png",
"client_uri":"https://client.salesforce.com/info.html",
"scopes":["openid","refresh_token","id","api"]}
Introspection de jeton de requête
L'application connectée représentant la passerelle API externe envoie une requête au point de terminaison d'introspection de jeton Salesforce pour valider son jeton d'accès. Pour des détails spécifiques sur cette requête, consultez Introspection de jeton OpenID Connect.
Salesforce valide le jeton
Salesforce vérifie l'identifiant du client dans l'en-tête et envoie une réponse indiquant si le jeton est actif. Cette réponse indique que le jeton est toujours actif.
HTTP/1.1 200 OK
Content-Type: application/json
{
"active":true,
"scope":"id api web full refresh_token openid",
"client_id":"OAuthSp",
"username":"myuser@salesforce.com",
"sub":"https://login.salesforce.com/id/00Dxx0000001gEREAY/005xx000001Sv6AAAS",
"token_type":"access_token",
"exp":1528502109,
"iat":1528494909,
"nbf":1528494909"
}Si vous insérez le paramètre child_sessions dans la requête, la réponse inclut des informations sur la validité des sessions enfants, comme suit.
HTTP/1.1 200 OK
Content-Type: application/json
{
"active":true,
"scope":"id api web full refresh_token openid",
"client_id":"OAuthSp",
"username":"myuser@salesforce.com",
"sub":"https://login.salesforce.com/id/00Dxx0000001gEREAY/005xx000001Sv6AAAS",
"token_type":"access_token",
"exp":1528502109,
"iat":1528494909,
"nbf":1528494909
child_sessions":{
"content":"inactive",
"lightning":"active",
"visualforce":"missing"}
}Si le jeton n'est pas actif, Salesforce envoie la réponse suivante.
HTTP/1.1 200 OK
Content-Type: application/json
{
"active": false
}