Identité personnalisée
Vous pouvez utiliser votre propre fournisseur d'identité personnalisé lors de l'authentification. Votre fournisseur d'identité peut se conformer à tout mécanisme d'authentification autre que ceux pris en charge par IBM Cloud® App ID, y compris aux mécanismes propriétaires ou existants.
Présentation
L'utilisation de votre propre fournisseur d'identité vous permet de créer un flux d'authentification personnalisé qui utilise vos propres protocoles. Vous disposez ainsi d'un plus grand contrôle, par exemple sur les informations que vous souhaitez partager ou les informations qui sont stockées.
Veillez à configurer votre fournisseur personnalisé avant de l'ajouter à votre application.
Quand utiliser ce flux ?
Lorsqu'App ID ne propose pas de prise en charge directe pour un fournisseur d'identité particulier, vous pouvez utiliser le flux d'identité personnalisé pour relier le protocole d'authentification au flux d'authentification existant d'App ID. Par exemple, vous pouvez utiliser GitHub ou LinkedIn pour autoriser vos utilisateurs à se connecter. Vous pouvez utiliser le logiciel SDK existant du fournisseur d'identité pour faciliter les informations d'authentification de l'utilisateur avant de les conditionner et de les échanger avec App ID.
Il existe de nombreux scénarios dans lesquels un flux d'authentification différent est nécessaire :
- Fournisseurs d'identité propriétaires internes
- Fournisseurs d'identité tiers
- Flux d'authentification complexes pouvant inclure des mécanismes propriétaires multi-facteurs
Occasionnellement, un fournisseur existant peut utiliser son propre protocole d'authentification personnalisé. Comme le flux d'identité personnalisé dissocie complètement l'authentification de l'autorisation, vous pouvez adopter n'importe quel mécanisme d'authentification de votre choix, puis fournir les informations d'authentification obtenues à App ID. Tout cela, sans exposer les données d'identification de l'utilisateur.
Comment fonctionne ce flux d'un point de vue technique ?
Le flux de travail de l'identité personnalisée est construit sur le type d'octroi de l'extension JWT-Bearer qui est défini dans le cadre d'assertion pour OAuth 2.0 Authorization Grants [RFC7521 ]. Pour échanger des informations utilisateur contre des jetons App ID, votre architecture d'authentification crée une relation de confiance avec App ID à l'aide d'une paire de clés asymétriques RSA. Une fois la relation de confiance établie, vous pouvez utiliser le type d'octroi JWT-Bearer pour échanger des informations utilisateur vérifiées dans un jeton JWT signé pour des jetons App ID.
A quoi ressemble le flux ?
Comme pour tous les flux d'authentification, l'identité personnalisée nécessite que l'application soit en mesure d'établir un degré de confiance avec App ID afin de garantir l'intégrité des informations utilisateur du fournisseur d'identité. L'identité personnalisée utilise une paire de clés publiques et privées RSA asymétriques pour établir sa relation de confiance. Selon vos exigences architecturales, l'identité personnalisée prend en charge deux modèles de confiance qui diffèrent uniquement par l'emplacement de stockage et l'utilisation de la clé privée.
|
|---|
| Comme avec les flux OAuth 2.0 traditionnels, le modèle de confiance le plus sécurisé crée une relation entre votre fournisseur d'identité et le serveur d'autorisation, dans ce cas App ID directement. Sous ce modèle, votre fournisseur d'identité est responsable du stockage de la clé privée et de la signature des assertions JWT. Lorsqu'elles sont transmises à App ID, ces assertions sont validées avec la clé publique correspondante, garantissant ainsi que les informations utilisateur de votre fournisseur d'identité n'ont pas été modifiées de manière malveillante lors du transport. |
|
|---|
| Vous pouvez également baser votre modèle de confiance sur la relation entre votre application et App ID. Dans ce flux, votre clé privée est stockée dans votre application côté serveur. Après une authentification réussie, votre application est chargée de convertir la réponse du fournisseur d'identité en jeton JWT et de signer ce dernier avec sa clé privée avant que l'application ne l'envoie à App ID. Comme ce fournisseur d'identité n'a pas de relation avec App ID, cette architecture crée un modèle de confiance plus faible. Bien que App ID puisse faire confiance aux informations envoyées par l'application côté serveur, il ne peut pas être certain que les données sont les données originales envoyées par le fournisseur d'identité. |
Génération d'un jeton Web JSON
Vous pouvez convertir vos données d'utilisateur vérifié en un JWT d'identité personnalisé en générant un jeton web JSON. Le jeton doit être signé avec la clé privée qui correspond à votre clé publique préconfigurée. Pour obtenir une liste des bibliothèques de signature de jetons, consultez le site https://jwt.io/.
Exemple de format JWT
{
// Header
"alg": "RS256",
"typ": "JOSE",
// Payload
// Required
"iss": "String", // Should reference your identity provider
"aud": "String", // Must be the OAuth server URL name
"exp": "Int", // Should be a value with a short lifespan
"sub": "String", // Must be the unique user ID provided by your identity provider
// Normalized claims (optional)
"name": "String",
"email": "String",
"locale": "String",
"picture": "String",
"gender": "String",
// Custom Scopes to add to access token (optional)
scope="custom_scope1 custom_scope2"
// Other custom claims (optional)
role="admin"
}
| Zone | Description |
|---|---|
iss |
Doit contenir une référence à votre fournisseur d'identité. |
aud |
URL du serveur OAuth. Format : https://<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>. |
exp |
Durée de validité du jeton. Pour des raisons de sécurité, sa durée de vie doit être courte et il doit être spécifique. |
sub |
ID utilisateur unique fourni par le fournisseur d'identité. |
| Revendications normalisées | Toutes les revendications normalisées (normalized claims) sont fournies dans le jeton d'identité renvoyé en réponse à cette demande. D'autres revendications personnalisées (custom claims)
sont disponibles en utilisant le noeud final /userinfo. |
| Portée |
Par défaut, tous les jetons App ID contiennent un groupe de portées (scopes) prédéfinies. Vous pouvez demander des portées supplémentaires en effectuant l'une des opérations suivantes:
|
Extraction de jetons App ID
Vous devez disposer de jetons App ID pour pouvoir créer le pont entre votre fournisseur personnalisé et App ID. Pour obtenir des jetons de service, échangez vos informations d'utilisateur vérifié en utilisant le point de terminaison /token.
Post /token
Content-Type: application/x-www-from-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
assertion=<payload>
scope="<spaceSeparatedScopeArray>"
| Variable | Description |
|---|---|
| type de contenu | applications/x-www-from-urlencoded |
| grant_type | urn:ietf:params:oauth:grant-type:jwt-bearer |
| assertion | Chaîne de contenu JWS. |
| scope | Liste de vos portées personnalisées séparées par des blancs. |