快速入門:使用 Azure Spring Apps 企業版方案設定應用程式的單一登錄
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於: ❎基本/標準 ✅ 企業
本快速入門說明如何為在 Azure Spring Apps 企業版方案中執行的應用程式設定單一登錄。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- Azure Spring Apps 企業版方案的授權。 如需詳細資訊,請參閱 Azure Marketplace 中的企業方案。
- Azure CLI 2.45.0 版或更高版本。
- Git。
- jq
- Azure Spring 應用程式企業方案延伸模組。 使用下列命令來移除舊版並安裝最新的企業方案延伸模組。 如果您先前已安裝
spring-cloud
延伸模組,請將其解除安裝,以避免設定與版本不符。az extension add --upgrade --name spring az extension remove --name spring-cloud
- 使用企業方案,完成建置和部署應用程式至 Azure Spring Apps 中的步驟。
準備單一登錄認證
若要設定應用程式的單一登錄,您需要準備認證。 下列各節說明使用現有提供者或布建具有 Microsoft Entra 標識符的應用程式註冊的步驟。
使用現有的提供者
請遵循下列步驟,使用現有的識別提供者來設定單一登錄。 如果您要布建Microsoft Entra 應用程式註冊,請直接跳到下一節, 建立並設定具有 Microsoft Entra ID 的應用程式註冊。
設定現有的識別提供者,以允許重新導向回適用於 VMware Tanzu 的 Spring Cloud Gateway 和 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"
取得識別提供者的
Client ID
與Client Secret
。Issuer URI
取得識別提供者的 。 您必須使用簽發者 URI 來設定提供者,這是其判斷提示為其簽發者識別碼的 URI。 例如,如果issuer-uri
提供的 是https://example.com
,則會對https://example.com/.well-known/openid-configuration
提出OpenID提供者組態要求。 結果應是 OpenID 提供者設定回應。注意
您只能使用支援 OpenID Connect Discovery 通訊協定的授權伺服器。
JWK URI
取得識別提供者的 ,以供稍後使用。JWK URI
通常會採用 或${ISSUER_URI}/<version>/keys
格式${ISSUER_URI}/keys
。 身分識別服務應用程式會使用公用 JSON Web 金鑰 (JWK) 來驗證單一登錄識別提供者授權伺服器所發出的 JSON Web 令牌 (JWT)。
使用 Microsoft Entra ID 建立及設定應用程式註冊
若要向 Microsoft Entra 識別子註冊應用程式,請遵循下列步驟。 如果您使用現有的提供者認證,請直接跳到下一節部署 Identity Service 應用程式。
使用下列命令建立具有 Microsoft Entra ID 的應用程式註冊,並儲存輸出:
az ad app create --display-name <app-registration-name> > ad.json
使用下列命令來擷取應用程式識別碼並收集客戶端密碼:
export APPLICATION_ID=$(cat ad.json | jq -r '.appId') az ad app credential reset --id ${APPLICATION_ID} --append > sso.json
使用下列命令將服務主體指派給應用程式註冊:
az ad sp create --id ${APPLICATION_ID}
使用下列命令來擷取 Spring Cloud Gateway 和 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"
使用下列命令來擷取應用程式的
Client ID
。 儲存輸出以供稍後在本快速入門中使用。cat sso.json | jq -r '.appId'
使用下列命令來擷取應用程式的
Client Secret
。 儲存輸出以供稍後在本快速入門中使用。cat sso.json | jq -r '.password'
使用下列命令來擷
Issuer URI
取 。 儲存輸出以供稍後在本快速入門中使用。export TENANT_ID=$(cat sso.json | jq -r '.tenant') echo "https://login.microsoftonline.com/${TENANT_ID}/v2.0"
JWK URI
從下列指令的輸出擷取 。 Identity Service 應用程式會使用公用 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"
部署 Identity Service 應用程式
若要完成單一登錄體驗,請使用下列步驟來部署 Identity Service 應用程式。 Identity Service 應用程式提供單一路由來協助識別使用者。
瀏覽至專案資料夾。
使用下列命令來建立
identity-service
應用程式:az spring app create \ --resource-group <resource-group-name> \ --name identity-service \ --service <Azure-Spring-Apps-service-instance-name>
使用下列命令,藉由系結至應用程式組態服務來啟用身分識別服務的外部化組態:
az spring application-configuration-service bind \ --resource-group <resource-group-name> \ --app identity-service \ --service <Azure-Spring-Apps-service-instance-name>
使用下列命令,藉由系結至服務登錄來啟用身分識別服務的服務探索和註冊:
az spring service-registry bind \ --resource-group <resource-group-name> \ --app identity-service \ --service <Azure-Spring-Apps-service-instance-name>
使用下列命令來部署身分識別服務:
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>"
使用下列命令將要求路由傳送至身分識別服務:
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 Gateway 的單一登錄
您可以設定 Spring Cloud Gateway 以使用單一登錄來驗證要求。 若要將 Spring Cloud Gateway 設定為使用單一登錄,請遵循下列步驟:
使用下列命令來設定 Spring Cloud Gateway 以使用單一登入:
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>
指示購物車服務應用程式使用 Spring Cloud Gateway 進行驗證。 使用下列命令來提供必要的環境變數:
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"
指示訂單服務應用程式使用 Spring Cloud Gateway 進行驗證。 使用下列命令來提供必要的環境變數:
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}"
使用下列命令來擷取 Spring Cloud Gateway 的 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 入口網站的網址:
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 ..."
下一步
繼續進行下列任一選擇性快速入門: