你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:为使用 Azure Spring Apps 企业计划的应用程序配置单一登录

注意

从 2025 年 3 月中旬开始,基本、标准和企业计划将弃用,停用期为三年。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

从 2024 年 9 月 30 日开始,标准消耗和专用计划将弃用,六个月后将完全关闭。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

本文适用于:❌ 基本版/标准版 ✔️ 企业版

本快速入门介绍了如何为在 Azure Spring Apps 企业计划中运行的应用程序配置单一登录。

先决条件

准备单一登录凭据

若要为应用程序配置单一登录,需要准备凭据。 以下部分介绍了使用现有提供程序或使用 Microsoft Entra ID 预配应用程序注册的步骤。

使用现有提供程序

按照以下步骤使用现有的标识提供者配置单一登录。 如果要预配 Microsoft Entra 应用注册,请跳至下一部分:使用 Microsoft Entra ID 创建和配置应用程序注册

  1. 配置现有的标识提供者以允许重定向回适用于 VMware Tanzu 的 Spring Cloud 网关和适用于 VMware Tanzu 的 API 门户。 Spring Cloud 网关有一个 URI,用于允许重新进入网关。 API 门户有两个 URI,用于支持用户界面和基础 API。 以下命令将会检索这些你添加到单一登录提供程序配置的 URI。

    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. 获取标识提供者的 Client IDClient Secret

  3. 获取标识提供者的 Issuer URI。 必须使用颁发者 URI 配置提供程序,该 URI 是它断言为其颁发者标识符的 URI。 例如,如果提供的 issuer-uri 是“https://example.com”,则将向“https://example.com/.well-known/openid-configuration”发出 OpenID 提供程序配置请求。 结果应该是 OpenID 提供程序配置响应。

    注意

    只能使用支持 OpenID Connect Discovery 协议的授权服务器。

  4. 获取标识提供者的 JWK URI 供以后使用。 JWK URI 通常采用 ${ISSUER_URI}/keys${ISSUER_URI}/<version>/keys 的形式。 标识服务应用程序将使用公共 JSON Web 密钥 (JWK) 来验证由单一登录标识提供者的授权服务器颁发的 JSON Web 令牌 (JWT)。

使用 Microsoft Entra ID 创建和配置应用程序注册

要使用 Microsoft Entra ID 注册应用程序,请执行以下步骤: 如果使用现有提供程序的凭据,请跳至下一部分:部署标识服务应用程序

  1. 使用以下命令在 Microsoft Entra ID 中创建应用程序注册并保存输出:

    az ad app create --display-name <app-registration-name> > ad.json
    
  2. 使用以下命令检索应用程序 ID 并收集客户端密码:

    export APPLICATION_ID=$(cat ad.json | jq -r '.appId')
    az ad app credential reset --id ${APPLICATION_ID} --append > sso.json
    
  3. 使用以下命令将服务主体分配给应用程序注册:

    az ad sp create --id ${APPLICATION_ID}
    
  4. 使用以下命令检索 Spring Cloud 网关和 API 门户的 URL,并将必要的回复 URL 添加到 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. 使用以下命令检索应用程序的 Client ID。 保存输出以便稍后在本快速入门中使用。

    cat sso.json | jq -r '.appId'
    
  6. 使用以下命令检索应用程序的 Client Secret。 保存输出以便稍后在本快速入门中使用。

    cat sso.json | jq -r '.password'
    
  7. 使用以下命令检索 Issuer URI。 保存输出以便稍后在本快速入门中使用。

    export TENANT_ID=$(cat sso.json | jq -r '.tenant')
    echo "https://login.microsoftonline.com/${TENANT_ID}/v2.0"
    
  8. 从以下命令的输出中检索 JWK URI。 标识服务应用程序将使用公共 JSON Web 密钥 (JWK) 来验证 Active Directory 颁发的 JSON Web 令牌 (JWT)。

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

部署标识服务应用程序

若要完成单一登录体验,请使用以下步骤部署标识服务应用程序。 标识服务应用程序提供了一个单一的路径来帮助标识用户。

  1. 导航到项目文件夹。

  2. 使用以下命令创建 identity-service 应用程序:

    az spring app create \
        --resource-group <resource-group-name> \
        --name identity-service \
        --service <Azure-Spring-Apps-service-instance-name>
    
  3. 使用以下命令通过绑定到应用程序配置服务为标识服务启用外部化配置:

    az spring application-configuration-service bind \
        --resource-group <resource-group-name> \
        --app identity-service \
        --service <Azure-Spring-Apps-service-instance-name>
    
  4. 使用以下命令通过绑定到服务注册表为标识服务启用服务发现和注册:

    az spring service-registry bind \
        --resource-group <resource-group-name> \
        --app identity-service \
        --service <Azure-Spring-Apps-service-instance-name>
    
  5. 使用以下命令部署标识服务:

    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. 使用以下命令将请求路由到标识服务:

    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
    

为 Spring Cloud 网关配置单一登录

可以配置 Spring Cloud 网关以使用单一登录对请求进行身份验证。 若要将 Spring Cloud 网关配置为使用单一登录,请执行以下步骤:

  1. 使用以下命令将 Spring Cloud 网关配置为使用单一登录:

    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. 指示购物车服务应用程序使用 Spring Cloud 网关进行身份验证。 使用以下命令提供必要的环境变量:

    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. 指示订单服务应用程序使用 Spring Cloud 网关进行身份验证。 使用以下命令提供必要的环境变量:

    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. 使用以下命令检索 Spring Cloud 网关的 URL:

    echo "https://${GATEWAY_URL}"
    

    可以在浏览器中打开输出 URL 以浏览更新后的应用程序。 登录功能现在可以使用,可用于将商品添加到购物车并下订单。 登录后,客户信息按钮将显示已登录的用户名。

为 API 门户配置单一登录

可以将适用于 VMware Tanzu 的 API 门户配置为使用单一登录来要求在浏览 API 之前进行身份验证。 使用以下命令为 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>

使用以下命令检索 API 门户的 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://${PORTAL_URL}"

可以在浏览器中打开输出 URL 以浏览应用程序 API。 在浏览 API 之前,系统会引导你进行登录。


清理资源

如果打算继续使用后续的快速入门和教程,则可能需要保留这些资源。 如果不再需要资源组,可以将其删除,这将删除资源组中的资源。 若要使用 Azure CLI 删除资源组,请使用以下命令:

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

后续步骤

继续学习以下任一可选快速入门: