Inicio rápido: configuración del inicio de sesión único en aplicaciones mediante el plan Enterprise de Azure Spring Apps

Nota

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

La información de este artículo puede ponerse en práctica en:❌ ✔️ Básico o Estándar ✔️ Enterprise

En este artículo de inicio rápido se muestra cómo configurar el inicio de sesión único para las aplicaciones que se ejecutan en el plan Enterprise de Azure Spring Apps.

Requisitos previos

Preparación de las credenciales de inicio de sesión único

Para configurar el inicio de sesión único para la aplicación, tiene que preparar las credenciales. En las secciones siguientes se describen los pasos para usar un proveedor existente o el aprovisionamiento de un registro de aplicación con Microsoft Entra ID.

Uso de un proveedor existente

Siga estos pasos para configurar el inicio de sesión único mediante un proveedor de identidades existente. Si va a aprovisionar un registro de aplicaciones de Microsoft Entra, vaya a la sección siguiente, Creación y configuración de un registro de aplicación con Microsoft Entra ID.

  1. Configure el proveedor de identidades existente para permitir redireccionamientos a Spring Cloud Gateway for VMware Tanzu y el portal de API para VMware Tanzu. Spring Cloud Gateway tiene un único URI para permitir el reingreso en la puerta de enlace. Portal de API tiene dos URI para admitir la interfaz de usuario y la API subyacente. Los siguientes comandos recuperan estos URI que se agregan a la configuración del proveedor de inicio de sesión único.

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
    
    export PORTAL_URL=$(az spring api-portal show \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
    
    echo "https://${GATEWAY_URL}/login/oauth2/code/sso"
    echo "https://${PORTAL_URL}/oauth2-redirect.html"
    echo "https://${PORTAL_URL}/login/oauth2/code/sso"
    
  2. Obtenga el Client ID y Client Secret para el proveedor de identidades.

  3. Obtenga el Issuer URI para el proveedor de identidades. Tiene que configurar el proveedor con un URI del emisor, que es el URI que declara como identificador de su emisor. Por ejemplo, si el issuer-uri proporcionado es https://example.com, se hace una solicitud de configuración del proveedor OpenID a https://example.com/.well-known/openid-configuration. Se espera que el resultado sea una respuesta de configuración del proveedor de OpenID.

    Nota

    Solo puede usar servidores de autorización que admitan el protocolo OpenID Connect Discovery.

  4. Obtenga el JWK URI para el proveedor de identidades para usarlo más adelante. JWK URI suele tomar la forma de ${ISSUER_URI}/keys o ${ISSUER_URI}/<version>/keys. La aplicación Identity Service usa las claves web JSON (JWK) públicas para comprobar los tokens web JSON (JWT) emitidos por el servidor de autorización del proveedor de identidades de inicio de sesión único.

Creación y configuración de un registro de aplicación con Microsoft Entra ID

Para registrar la aplicación con Microsoft Entra ID, siga estos pasos. Si usa las credenciales de un proveedor existente, vaya a la sección siguiente, Implementación de la aplicación Identity Service.

  1. Use el siguiente comando para crear un registro de aplicación con Microsoft Entra ID y guarde la salida:

    az ad app create --display-name <app-registration-name> > ad.json
    
  2. Use el siguiente comando para recuperar el identificador de la aplicación y recopilar el secreto de cliente:

    export APPLICATION_ID=$(cat ad.json | jq -r '.appId')
    az ad app credential reset --id ${APPLICATION_ID} --append > sso.json
    
  3. Use el siguiente comando para asignar una entidad de servicio al registro de aplicación:

    az ad sp create --id ${APPLICATION_ID}
    
  4. Use los siguientes comandos para recuperar las direcciones URL de Spring Cloud Gateway y portal de API, y agregar las direcciones URL de respuesta necesarias al registro de aplicación de Active Directory.

    export APPLICATION_ID=$(cat ad.json | jq -r '.appId')
    
    export GATEWAY_URL=$(az spring gateway show \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
    
    export PORTAL_URL=$(az spring api-portal show \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
    
    az ad app update \
        --id ${APPLICATION_ID} \
        --web-redirect-uris "https://${GATEWAY_URL}/login/oauth2/code/sso" "https://${PORTAL_URL}/oauth2-redirect.html" "https://${PORTAL_URL}/login/oauth2/code/sso"
    
  5. Use el siguiente comando para recuperar el Client ID de la aplicación. Guarde la salida para usarla más adelante en este artículo de inicio rápido.

    cat sso.json | jq -r '.appId'
    
  6. Use el siguiente comando para recuperar el Client Secret de la aplicación. Guarde la salida para usarla más adelante en este artículo de inicio rápido.

    cat sso.json | jq -r '.password'
    
  7. Ejecute el comando siguiente para recuperar el Issuer URI. Guarde la salida para usarla más adelante en este artículo de inicio rápido.

    export TENANT_ID=$(cat sso.json | jq -r '.tenant')
    echo "https://login.microsoftonline.com/${TENANT_ID}/v2.0"
    
  8. Recupere el JWK URI de la salida del comando siguiente. La aplicación Identity Service usa las claves web JSON (JWK) públicas para comprobar los tokens web JSON (JWT) emitidos por Active Directory.

    export TENANT_ID=$(cat sso.json | jq -r '.tenant')
    echo "https://login.microsoftonline.com/${TENANT_ID}/discovery/v2.0/keys"
    

Implementación de la aplicación Identity Service

Para completar la experiencia de inicio de sesión único, siga los pasos a continuación para implementar la aplicación Identity Service. La aplicación Identity Service ofrece una única ruta para ayudar a identificar el usuario.

  1. Vaya a la carpeta del proyecto.

  2. Use el siguiente comando para crear la aplicación identity-service:

    az spring app create \
        --resource-group <resource-group-name> \
        --name identity-service \
        --service <Azure-Spring-Apps-service-instance-name>
    
  3. Use el siguiente comando para habilitar la configuración externalizada para el servicio de identidad mediante el enlace al servicio de configuración de la aplicación:

    az spring application-configuration-service bind \
        --resource-group <resource-group-name> \
        --app identity-service \
        --service <Azure-Spring-Apps-service-instance-name>
    
  4. Use el siguiente comando para habilitar la detección y el registro de servicios para el servicio de identidad mediante el enlace al registro de servicios:

    az spring service-registry bind \
        --resource-group <resource-group-name> \
        --app identity-service \
        --service <Azure-Spring-Apps-service-instance-name>
    
  5. Use el siguiente comando para implementar el servicio de identidad:

    az spring app deploy \
        --resource-group <resource-group-name> \
        --name identity-service \
        --service <Azure-Spring-Apps-service-instance-name> \
        --config-file-pattern identity/default \
        --source-path apps/acme-identity \
        --build-env BP_JVM_VERSION=17 \
        --env "JWK_URI=<jwk-uri>"
    
  6. Use el siguiente comando para enrutar las solicitudes al servicio de identidad:

    az spring gateway route-config create \
        --resource-group <resource-group-name> \
        --name identity-routes \
        --service <Azure-Spring-Apps-service-instance-name> \
        --app-name identity-service \
        --routes-file azure-spring-apps-enterprise/resources/json/routes/identity-service.json
    

Configuración del inicio de sesión único para Spring Cloud Gateway

Puede configurar Spring Cloud Gateway para autenticar las solicitudes mediante el inicio de sesión único. Para configurar Spring Cloud Gateway para que use el inicio de sesión único, siga estos pasos:

  1. Use los siguientes comandos para configurar Spring Cloud Gateway para usar el inicio de sesión único:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
    
    az spring gateway update \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-service-instance-name> \
        --api-description "Fitness Store API" \
        --api-title "Fitness Store" \
        --api-version "v1.0" \
        --server-url "https://${GATEWAY_URL}" \
        --allowed-origins "*" \
        --client-id <client-id> \
        --client-secret <client-secret> \
        --scope "openid,profile" \
        --issuer-uri <issuer-uri>
    
  2. Indique a la aplicación de servicio cart que use Spring Cloud Gateway para la autenticación. Use el siguiente comando para proporcionar las variables de entorno necesarias:

    az spring app update \
        --resource-group <resource-group-name> \
        --name cart-service \
        --service <Azure-Spring-Apps-service-instance-name> \
        --env "AUTH_URL=https://${GATEWAY_URL}" "CART_PORT=8080"
    
  3. Indique a la aplicación de servicio order que use Spring Cloud Gateway para la autenticación. Use el siguiente comando para proporcionar las variables de entorno necesarias:

    az spring app update \
        --resource-group <resource-group-name> \
        --name order-service \
        --service <Azure-Spring-Apps-service-instance-name> \
        --env "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}"
    
  4. Use el siguiente comando para recuperar la dirección URL de Spring Cloud Gateway:

    echo "https://${GATEWAY_URL}"
    

    Puede abrir la dirección URL de salida en un explorador para examinar la aplicación actualizada. La función de inicio de sesión ahora funciona, lo que le permite agregar elementos al carro y hacer pedidos. Después de iniciar sesión, el botón de información del cliente muestra el nombre del usuario que ha iniciado sesión.

Configuración del inicio de sesión único para el portal de API

Puede configurar el portal de API para VMware Tanzu para que use el inicio de sesión único para exigir la autenticación antes de explorar las API. Use los siguientes comandos para configurar el inicio de sesión único para el portal de API:

export PORTAL_URL=$(az spring api-portal show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

az spring api-portal update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --client-id <client-id> \
    --client-secret <client-secret> \
    --scope "openid,profile,email" \
    --issuer-uri <issuer-uri>

Use los siguientes comandos para recuperar la dirección URL para el portal de API:

export PORTAL_URL=$(az spring api-portal show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${PORTAL_URL}"

Puede abrir la dirección URL de salida en un explorador para examinar las API de la aplicación. Se le dirige a que inicie sesión antes de examinar las API.


Limpieza de recursos

Si planea seguir trabajando en otros inicios rápidos y tutoriales, considere la posibilidad de dejar estos recursos activos. Cuando ya no lo necesite, elimine el grupo de recursos, que elimina los recursos que contiene. Para eliminar el grupo de recursos mediante la CLI de Azure, use estos comandos:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Pasos siguientes

Continúe con cualquiera de los siguientes artículos de inicio rápido opcionales: