Ce guide explique comment configurer la connexion unique (SSO) pour les applications au sein d'une instance Alibaba Cloud Service Mesh (ASM).
Prérequis
Vous avez créé une instance ASM Enterprise Edition. Pour plus d'informations, consultez la rubrique Créer une instance ASM.
Un cluster ACK managé est créé. Pour plus d'informations, consultez la rubrique Créer un cluster ACK managé.
L'injection automatique de sidecar est activée pour le namespace par défaut. Pour plus d'informations, consultez la rubrique Activer l'injection automatique de sidecar.
Contexte
De nombreuses applications nécessitent un contrôle d'accès, en accordant l'accès uniquement aux utilisateurs authentifiés. À mesure que les systèmes se complexifient, la connexion unique (SSO) constitue une solution efficace permettant aux utilisateurs de se connecter à plusieurs systèmes avec un seul compte. Le service Custom Authorization Service d'ASM vous permet de mettre en œuvre le SSO pour vos applications maillées sans modifier le code.
L'utilisation d'ASM pour implémenter le SSO permet de réduire les coûts de refactoring des applications et d'exploitation et maintenance (O&M). Ce guide utilise une instance Alibaba Cloud IDaaS comme fournisseur d'identité (IdP) pour activer le SSO pour les services au sein du maillage. Au lieu d'intégrer la logique d'authentification et d'autorisation dans vos applications, vous pouvez configurer ASM afin qu'il utilise un service d'autorisation personnalisé. Ce service s'intègre à Alibaba Cloud IDaaS ou à tout IdP conforme à OIDC pour gérer le flux d'autorisation et de connexion. Une fois qu'un utilisateur est authentifié avec succès, la requête et les informations d'identité de l'utilisateur sont transférées à l'application, qui peut alors exécuter la logique métier en fonction de cette identité.
Concepts
|
Concept |
Description |
|
IdP |
Un fournisseur d'identité (IdP) est un service qui crée, maintient et gère les identités des utilisateurs, et fournit des services d'authentification. Par exemple, lorsque vous utilisez un compte Google pour vous connecter à une application tierce, Google agit en tant qu'IdP. |
|
OIDC |
OpenID Connect (OIDC) est un protocole d'authentification construit sur le framework OAuth 2.0. Pour plus d'informations, consultez la page OpenID Connect. |
|
Scope |
Dans OIDC, les scopes spécifient les attributs utilisateur (tels que l'e-mail et les informations de profil) auxquels une application est autorisée à accéder. Lors de l'authentification, l'IdP peut demander à l'utilisateur d'accorder l'autorisation à l'application d'accéder à certains scopes de ses données utilisateur. |
Étape 1 : Créer une instance IDaaS et un utilisateur de test
-
Connectez-vous à la console EIAM et créez une instance Alibaba Cloud IDaaS.
RemarqueUne instance Alibaba Cloud IDaaS agit comme un système de comptes autonome. La création d'une instance équivaut à la création d'un système indépendant de gestion des identités.
Sur la page EIAM, cliquez sur le nom de l'instance Alibaba Cloud IDaaS.
Dans le volet de navigation de gauche, sélectionnez .
Sur la page Account, cliquez sur l'onglet Account, puis cliquez sur Create User.
Dans le panneau Create User, saisissez les informations de l'utilisateur et cliquez sur OK.
Étape 2 : Ajouter et configurer une application OIDC
Les applications de votre instance Alibaba Cloud IDaaS agissent comme des interfaces. L'instance IDaaS peut exposer ces interfaces de différentes manières pour permettre le SSO. Ce guide utilise une application OIDC pour illustrer le processus.
Dans le volet de navigation de gauche de la console EIAM, cliquez sur Application Management.
Sur la page Application Management, cliquez sur Add Application.
Sur la page Add Application, cliquez sur l'onglet Standard Protocols. Dans la carte OIDC, cliquez sur Add Application.
Dans la boîte de dialogue Add Application-OIDC, saisissez un Application Name et cliquez sur Add.
Sur la page de détails OIDC Application, sélectionnez .
-
Dans l'onglet de configuration SSO, définissez les Redirect URIs. Cliquez sur Show Advanced Settings, sélectionnez les informations utilisateur à obtenir dans la section scopes, puis cliquez sur Save.
Dans le volet de navigation de gauche, cliquez sur Applications. Sélectionnez votre application cible, cliquez sur l'onglet Sign-in, puis accédez au sous-onglet SSO. Les scopes disponibles incluent
openid,email,phoneetprofile.RemarqueDans cet exemple, l'URI de redirection Redirect URI est définie sur
http://{IP_address_of_the_ingress_gateway}/oauth2/callback. Remplacez{IP_address_of_the_ingress_gateway}par l'adresse IP réelle de votre passerelle d'entrée. Sur la page de détails OIDC Application, sélectionnez , puis cliquez sur Authorize.
Dans la boîte de dialogue Authorize, accordez des permissions à l'utilisateur que vous avez créé à l'étape 1, puis cliquez sur Confirm.
Après avoir configuré l'application OIDC, notez les valeurs Issuer, client_id et client_secret. Vous aurez besoin de ces informations pour configurer le SSO dans ASM.
Issuer : Dans votre application OIDC, vous pouvez obtenir cette valeur via . Issuer : Obtenez cette valeur depuis la section Application Configuration Information en bas de la page Login Access > Single Sign-On de votre application OIDC. Ce champ est utilisé pour vérifier la source de l'émission des jetons et correspond également à l'URL de base
baseUrldes URLs des endpoints.client_id et client_secret : Sur la page de détails de l'application OIDC, trouvez ces valeurs dans la section General.
Étape 3 : Déployer et exposer l'application de test
Ce guide utilise l'application httpbin pour les tests. Cette application permet d'inspecter les détails des requêtes, ce qui simplifie la vérification des informations obtenues auprès de l'IdP après une connexion réussie.
-
Utilisez le fichier YAML suivant pour déployer l'application httpbin dans le namespace
defaultde votre cluster ACK. -
Utilisez le fichier YAML suivant pour configurer une ressource Gateway pour votre instance ASM. Pour plus d'informations, consultez la rubrique Gérer les passerelles Istio.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: ingressgateway namespace: istio-system spec: selector: app: istio-ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP -
Utilisez le fichier YAML suivant pour appliquer un virtual service à votre instance ASM. Pour plus d'informations, consultez la rubrique Gérer les virtual services.
Ce virtual service définit une route par défaut vers l'application httpbin.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: ingressgateway-vs namespace: istio-system spec: gateways: - ingressgateway hosts: - '*' http: - name: default route: - destination: host: httpbin.default.svc.cluster.local port: number: 8000 -
Après avoir configuré la Gateway et le virtual service, vous pouvez accéder au service httpbin en exécutant la commande
curl -I http://{IP_address_of_the_ingress_gateway}:80.Exemple de sortie :
curl -I http://{IP_address_of_the_ingress_gateway}:80 HTTP/1.1 200 OK server: istio-envoy date: Fri, 19 Aug 2022 07:39:58 GMT content-type: text/html; charset=utf-8 content-length: 9593 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 3
Étape 4 : Activer l'autorisation personnalisée et configurer le SSO OIDC
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez . Sur la page qui s'affiche, cliquez sur Define Custom Authorization Service.
-
Sur la page Define External Authorization Service, cliquez sur l'onglet OIDC Authz and Authn Service, configurez les paramètres, puis cliquez sur Create.
RemarqueUtilisez les informations de l'application OIDC que vous avez obtenues à l'étape 2. Vous pouvez utiliser l'adresse IP de la passerelle d'entrée comme URI de redirection pour les connexions. Pour plus d'informations sur les secrets de cookie, consultez la page Generating a Cookie Secret.
-
Utilisez le KubeConfig du cluster du plan de données pour exécuter la commande suivante afin d'obtenir le nom de domaine du service d'autorisation externe OIDC.
kubectl get svc -n istio-system|grep oauth2proxy|awk -F' ' '{print $1}' -
Utilisez le fichier YAML suivant pour créer un virtual service qui reçoit les demandes d'authentification de la passerelle d'entrée.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: oauth2-vs namespace: istio-system spec: gateways: - ingressgateway hosts: - '*' http: - match: - uri: prefix: /oauth2 name: oauth2 route: - destination: host: # The domain name of the external authorization service obtained in the previous step. port: number: 4180ImportantPour éviter les conflits, ne créez pas d'autres virtual services qui correspondent au préfixe de chemin
/oauth2.
Étape 5 : Créer une politique d'autorisation
Sur la page de détails de l'instance ASM, sélectionnez dans le volet de navigation de gauche. Sur la page qui s'affiche, cliquez sur Create from YAML.
-
Sur la page Create, sélectionnez un Namespaces et un Scenario Template. Saisissez le fichier YAML suivant, puis cliquez sur Create.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: oidc namespace: istio-system spec: action: CUSTOM provider: name: httpextauth-oidc # The name of the custom authorization service created in the previous step. rules: - {} selector: matchLabels: istio: ingressgatewayRemarqueCette politique d'autorisation s'applique à toutes les requêtes envoyées à la passerelle d'entrée.
Étape 6 : Vérifier le résultat
-
Dans un navigateur web, accédez à http://{IP_address_of_the_ingress_gateway}:80.
La page de connexion OAuth2 Proxy s'affiche, contenant un bouton Sign in with OpenID Connect. Cela indique que OAuth2 Proxy a été déployé et intégré avec succès à OpenID Connect, et que le SSO est actif.
-
Cliquez sur Sign in with OpenID Connect.
Résultat attendu : La page de connexion Alibaba Cloud IDaaS s'affiche. La page contient des champs de saisie pour Account name, mobile number, or email et Password, ainsi qu'un bouton Log On. Cela confirme que la configuration SSO OIDC fonctionne.
-
Sur la page de connexion Alibaba Cloud IDaaS, saisissez les identifiants de l'utilisateur de test que vous avez créé à l'étape 1 et cliquez sur Log On.
Résultat attendu : Après une connexion réussie, la page de documentation Swagger API de httpbin.org s'affiche pour la version 0.9.2. La page affiche la description du service, « A simple HTTP Request & Response Service, » et répertorie les groupes d'API tels que HTTP Methods, Auth, Status codes et Request inspection. Cela confirme que la configuration SSO d'Alibaba Cloud IDaaS est valide.
-
Cliquez sur Request inspection, puis choisissez /headers > Try it out > Execute.
Résultat attendu : Après l'exécution de la requête, le serveur renvoie un code d'état
200 OK. Le corps de la réponse inclut un champAuthorizationcontenant un Bearer JWT, ce qui indique que l'autorisation JWT fonctionne.{ "headers": { "Accept": "application/json", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Authorization": "Bearer eyJraWQiOiJLRVkxM3d0ekhLSmdEbkFmd1lQR0RqemM5RFUzTkwSNXd1S0wiLC3hbGciOiJSUzI1NiJ9.eyJzdWIiOiJlc2VyVyX29xemw3Z3FQb2lrb2xtNG9xY29mMndlcGhtIiwinRpi-joiand0X2FhYWFkYXZ2aG12Y2JpdDRnbDVsNGNudDR5d2FwZDI3cnFkd2Z0eDI3cnFkZTByc2FtcnFkd2Z0ZDI3cnFkZTByc2FtIixxx.xxxb51hcGktY24taGFuZ3pobxxx.xxxMuY29xxx.3yiL2xxx.Fx3R1bjI1b3NkbG16Nmd0cWZxM2oycHpwZWZx-L2FwcF9tbDV0emFwc2w3em1mbzUzd2xxx.xxxaGFzaCI6IkUxcm9oRnlpR2FZYmJnTS.xxxtudHZpIiwiYXRf-IrODYgMTg2IDkxNzEgMjQ5MS.xxx.xxx.BanFbeM28p\nYp-aiEymtvy-QC-6VjohuSSi.xxx\nE9c3RTMntC66D7fxTGME2x.xxx.Et\nrwPRUTM-2AF74y2NVFtpNdkxbLenyz1duwTpeGANmgLGxxxJrZvKyNxBjAV6TZjGrUVVNICbU1_sg", "...": "..." } } -
Copiez le JWT du jeton Bearer de l'étape précédente et analysez-le avec un débogueur JWT.
Pour plus d'informations, consultez la page JWT.io.
Résultat attendu : Le JWT analysé montre que l'algorithme
algdans l'HEADER estRS256. Le PAYLOAD contient des claims standards du jeton d'ID OIDC, tels quesub,jti,iss(qui est l'endpoint OIDC de votre instance EIAM),iat,nbf,exp,aud,at_hash,c_hash,email,email_verified,phone_number,phone_number_verified,name,preferred_usernameetupdated_at. Cela confirme que le JWT contient les informations utilisateur d'Alibaba Cloud IDaaS et qu'ASM les a validées avec succès.