Esta guía explica cómo configurar el inicio de sesión único (SSO) para las aplicaciones en una instancia de Alibaba Cloud Service Mesh (ASM).
Requisitos previos
Creó una instancia de ASM Enterprise Edition. Para obtener más información, consulte Create an ASM instance.
Se creó un clúster administrado de ACK. Para obtener más información, consulte Create an ACK managed cluster.
Habilitó la inyección automática de sidecar para el namespace predeterminado. Para obtener más información, consulte Enable automatic sidecar injection.
Contexto
Muchas aplicaciones requieren control de acceso y solo permiten la entrada a usuarios autenticados. A medida que los sistemas se vuelven más complejos, el inicio de sesión único (SSO) representa una solución eficaz. Este mecanismo permite a los usuarios iniciar sesión en varios sistemas con una sola cuenta. El servicio de autorización personalizada de ASM le permite implementar SSO en las aplicaciones de su malla sin modificar el código.
Usar ASM para implementar SSO reduce la refactorización de aplicaciones y los costos de operación y mantenimiento. Esta guía utiliza una instancia de Alibaba Cloud IDaaS como proveedor de identidades (IdP) para habilitar SSO en los servicios de la malla. En lugar de integrar la lógica de autenticación y autorización dentro de sus aplicaciones, configure ASM para usar un servicio de autorización personalizada. Este servicio se integra con Alibaba Cloud IDaaS o con cualquier IdP compatible con OIDC para gestionar el flujo de autorización e inicio de sesión. Una vez que el usuario se autentica correctamente, la solicitud y su información de identidad se reenvían a la aplicación. De este modo, la aplicación ejecuta la lógica de negocio correspondiente a esa identidad.
Conceptos
|
Concepto |
Descripción |
|
IdP |
Un proveedor de identidades (IdP) es un servicio que crea, mantiene y gestiona identidades de usuario, además de proporcionar servicios de autenticación. Por ejemplo, cuando usa una cuenta de Google para iniciar sesión en una aplicación de terceros, Google actúa como IdP. |
|
OIDC |
OpenID Connect (OIDC) es un protocolo de autenticación construido sobre el framework OAuth 2.0. Para obtener más información, consulte OpenID Connect. |
|
Scope |
En OIDC, los scopes definen qué atributos del usuario (como el correo electrónico o la información del perfil) puede consultar una aplicación. Durante la autenticación, el IdP puede solicitar al usuario que otorgue permiso para que la aplicación acceda a scopes específicos de sus datos. |
Paso 1: Crear una instancia de IDaaS y un usuario de prueba
-
Inicie sesión en la consola de EIAM y cree una instancia de Alibaba Cloud IDaaS.
NotaUna instancia de Alibaba Cloud IDaaS funciona como un sistema de cuentas autónomo. Crear una instancia equivale a establecer un sistema independiente de gestión de identidades.
En la página EIAM, haga clic en el nombre de la instancia de Alibaba Cloud IDaaS.
En el panel de navegación izquierdo, seleccione .
En la página Account, haga clic en la pestaña Account y luego en Create User.
En el panel Create User, introduzca la información del usuario y haga clic en OK.
Paso 2: Agregar y configurar una aplicación OIDC
Las aplicaciones de su instancia de Alibaba Cloud IDaaS funcionan como interfaces. La instancia de IDaaS expone estas interfaces de diversas maneras para habilitar SSO. Esta guía utiliza una aplicación OIDC para demostrar el proceso.
En el panel de navegación izquierdo de la consola de EIAM, haga clic en Application Management.
En la página Application Management, haga clic en Add Application.
En la página Add Application, haga clic en la pestaña Standard Protocols. En la tarjeta OIDC, haga clic en Add Application.
En el cuadro de diálogo Add Application-OIDC, introduzca un valor en Application Name y haga clic en Add.
En la página de detalles de OIDC Application, seleccione .
-
En la pestaña de configuración de SSO, establezca los valores de Redirect URIs. Haga clic en Show Advanced Settings, seleccione la información de usuario que desea obtener en la sección scopes y luego haga clic en Save.
En el panel de navegación izquierdo, haga clic en Applications. Seleccione la aplicación de destino, haga clic en la pestaña Sign-in y vaya a la subpestaña SSO. Los scopes disponibles incluyen
openid,email,phoneyprofile.NotaEn este ejemplo, el parámetro Redirect URI se establece en
http://{IP_address_of_the_ingress_gateway}/oauth2/callback. Sustituya{IP_address_of_the_ingress_gateway}por la dirección IP real de su ingress gateway. En la página de detalles de OIDC Application, seleccione y haga clic en Authorize.
En el cuadro de diálogo Authorize, otorgue permisos al usuario que creó en el paso 1 y luego haga clic en Confirm.
Después de configurar la aplicación OIDC, anote los valores de Issuer, client_id y client_secret. Necesitará esta información para configurar SSO en ASM.
Issuer: en su aplicación OIDC, obtenga este valor desde . Issuer: obtenga este valor en la sección Application Configuration Information, ubicada en la parte inferior de la página Login Access > Single Sign-On de su aplicación OIDC. Este campo sirve para verificar el origen de la emisión del token y también representa el valor
baseUrlde las URL de los endpoints.client_id y client_secret: en la página de detalles de la aplicación OIDC, busque estos valores en la sección General.
Paso 3: Desplegar y exponer la aplicación de prueba
Esta guía utiliza la aplicación httpbin para las pruebas. Dicha aplicación permite inspeccionar los detalles de las solicitudes, lo cual facilita comprobar la información obtenida del IdP tras un inicio de sesión correcto.
-
Use el siguiente archivo YAML para desplegar la aplicación httpbin en el namespace
defaultde su clúster de ACK. -
Use el siguiente archivo YAML para configurar un recurso Gateway en su instancia de ASM. Para obtener más información, consulte Manage Istio gateways.
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 -
Use el siguiente archivo YAML para aplicar un servicio virtual a su instancia de ASM. Para obtener más información, consulte Manage virtual services.
Este servicio virtual define una ruta predeterminada hacia la aplicación 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 -
Después de configurar el recurso Gateway y el servicio virtual, acceda al servicio httpbin mediante el comando
curl -I http://{IP_address_of_the_ingress_gateway}:80.Salida de ejemplo:
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
Paso 4: Habilitar la autorización personalizada y configurar SSO con OIDC
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione . En la página que aparece, haga clic en Define External Authorization Service.
-
En la página Define External Authorization Service, haga clic en la pestaña OIDC Authz and Authn Service, configure los parámetros y luego haga clic en Create.
NotaUtilice la información de la aplicación OIDC que obtuvo en Step 2. Puede usar la dirección IP del ingress gateway como URI de redireccionamiento para los inicios de sesión. Para obtener más información sobre los secretos de cookies, consulte Generating a Cookie Secret.
-
Use el archivo KubeConfig del clúster del plano de datos para ejecutar el siguiente comando y obtener el nombre de dominio del servicio de autorización externa OIDC.
kubectl get svc -n istio-system|grep oauth2proxy|awk -F' ' '{print $1}' -
Use el siguiente archivo YAML para crear un servicio virtual que reciba las solicitudes de autenticación provenientes del ingress gateway.
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: 4180ImportantePara evitar conflictos, no cree otros servicios virtuales que coincidan con el prefijo de ruta
/oauth2.
Paso 5: Crear una política de autorización
En la página de detalles de la instancia de ASM, seleccione en el panel de navegación izquierdo. En la página que aparece, haga clic en Create from YAML.
-
En la página Create, seleccione un valor en Namespaces y una opción en Scenario Template. Introduzca el siguiente contenido YAML y luego haga clic en 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: ingressgatewayNotaEsta política de autorización se aplica a todas las solicitudes enviadas al ingress gateway.
Paso 6: Comprobar el resultado
-
En un navegador web, vaya a http://{IP_address_of_the_ingress_gateway}:80.
Aparece la página de inicio de sesión de OAuth2 Proxy, que contiene el botón Sign in with OpenID Connect. Esto indica que OAuth2 Proxy se desplegó e integró correctamente con OpenID Connect, y que SSO está activo.
-
Haga clic en Sign in with OpenID Connect.
Resultado esperado: aparece la página de inicio de sesión de Alibaba Cloud IDaaS. Dicha página incluye los campos de entrada Account name, mobile number, or email y Password, además del botón Log On. Esto confirma que la configuración de SSO con OIDC funciona adecuadamente.
-
En la página de inicio de sesión de Alibaba Cloud IDaaS, introduzca las credenciales del usuario de prueba que creó en Step 1 y haga clic en Log On.
Resultado esperado: después de iniciar sesión correctamente, aparece la página de documentación de la API Swagger de httpbin.org correspondiente a la versión 0.9.2. La página muestra la descripción del servicio, "A simple HTTP Request & Response Service,", y enumera grupos de API como HTTP Methods, Auth, Status codes y Request inspection. Esto confirma que la configuración de SSO con Alibaba Cloud IDaaS es válida.
-
Haga clic en Request inspection y luego seleccione /headers > Try it out > Execute.
Resultado esperado: después de ejecutar la solicitud, el servidor devuelve el código de estado
200 OK. El cuerpo de la respuesta incluye un campoAuthorizationque contiene un JWT de tipo Bearer, lo cual indica que la autorización mediante JWT funciona adecuadamente.{ "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", "...": "..." } } -
Copie el JWT del token Bearer obtenido en el paso anterior y analícelo sintácticamente con un depurador de JWT.
Para obtener más información, consulte JWT.io.
Resultado esperado: el análisis sintáctico del JWT muestra que el valor de
algen HEADER esRS256. PAYLOAD contiene claims estándar del ID Token de OIDC, tales comosub,jti,iss(que corresponde al endpoint OIDC de su instancia de EIAM),iat,nbf,exp,aud,at_hash,c_hash,email,email_verified,phone_number,phone_number_verified,name,preferred_usernameyupdated_at. Esto confirma que el JWT contiene la información del usuario proveniente de Alibaba Cloud IDaaS y que ASM lo validó correctamente.