我想透過 Amazon Cognito 使用者集區,將 Amazon Cognito 驗證與 Application Load Balancer 搭配使用。但是,我的使用者集區位於另一個 AWS 帳戶中。
解決方法
在下列解析中,帳戶 B 是擁有 Application Load Balancer 的帳戶,帳戶 A 是擁有使用者集區的帳戶。
建立 Application Load Balancer
如果您已經有 Application Load Balancer,則請繼續進行下一節。
如果您沒有 Application Load Balancer,請使用 HTTPS 接聽程式建立一個。
**注意:**只有 HTTPS 接聽程式支援 authenticate-cognito 及 authenticate-cognito 規則動作類型。
取得帳戶 B 中的 Application Load Balancer 的 DNS 名稱
在帳戶 B 中完成以下步驟:
- 開啟 Amazon Elastic Compute Cloud (Amazon EC2) console (Amazon Elastic Compute Cloud (Amazon EC2) 主控台)。
- 在導覽窗格中,選擇 Load Balancers (負載平衡器)。
- 選取您的 Application Load Balancer。
- 在 Description (說明) 索引標籤上,記下負載平衡器的 DNS 名稱,以便在後續步驟中使用。
在帳戶 A 中建立並設定使用者集區
如果您在另一個帳戶中已經有使用者集區,請繼續進行下一節。
如果您沒有使用者集區,請在帳戶 A 中完成以下步驟:
- 使用應用用戶端建立 Amazon Cognito 使用者集區。
**注意:**建立應用程式用戶端時,可以從以下四個選項中選擇其一:傳統 Web 應用程式、單頁應用程式、行動應用程式和 M2M 驗證。如果您選擇傳統的 Web 應用程式或 M2M 驗證,則會產生具有用戶端密碼的應用程式用戶端。
- 開啟 Amazon Cognito console (Amazon Cognito 主控台)。
- 在使用者集區的 User pool overview (使用者集區概觀) 中,記下使用者集區 ID,以便在後續步驟中使用。
- 在 Branding (品牌) 索引標籤上,選擇 Domain (網域)。為您的使用者集區新增 Amazon Cognito 網域名稱。網域名稱是 Cognito Hosted UI 所需的唯一網域首碼。
- 在 Applications (應用程式) 下,選擇 App clients (應用程式用戶端)。
- 選取要更新的應用程式用戶端。
- 在 App client page (應用程式用戶端頁面) 上,完成以下步驟:
開啟 Show client secret (顯示用戶端密碼)。
請記下應用程式用戶端 ID 和應用程式用戶端密碼,以便在後續步驟中使用。
- 在 Hosted UI (託管 UI) 下,新增 https://load-balancer-dns-name/oauth2/idpresponse 和 https://custom-domain-name/oauth2/idpresponse 回呼網址。
- 在 OAuth 2.0 授權類型,選取 Authorization code grant (授權代碼授權)。
- 在 OAuth 2.0 權限範圍,選取 openid。
- 選擇 Save changes (儲存變更)。
取得使用者集區的 OIDC 組態詳細資訊
若要將您的使用者集區設定為Application Load Balancer 上的 OpenID Connect (OIDC) 身分提供者 (IdP) ,您必須取得 OIDC 設定端點詳細資訊。
若要取得組態詳細資訊,請完成以下步驟:
- 在您的瀏覽器中,輸入網址 https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration。
**注意:**將 region 替換為您使用者集區的 AWS 區域,例如 us-east-1,並將 userPoolId 替換為您使用者集區的 ID。
- 在瀏覽器中顯示的 JSON 回應中,記下以下欄位的值:
authorization_endpoint
發行人
scopes_supported
token_endpoint
userinfo_endpoint
在帳戶 B 中設定 Application Load Balancer
在帳戶 B 中完成以下步驟:
- 開啟 Amazon EC2 console (Amazon EC2 主控台)。
- 選取您的 Application Load Balancer。
- 在 Listener and Rules (接聽程式和規則) 索引標籤上,選取 HTTPS:443 rule (HTTPS:443 規則)。
- 在 Manage rules (管理規則) 下,選擇 Edit rule (編輯規則)。
- 選取 default rules (預設規則)。
- 在 Actions (動作) 下,選擇 Edit rule (編輯規則)。
- 在 Default (預設) 動作下,選取 Authenticate Users (驗證使用者)。
**注意:**預設會選取 OIDC 身分提供者。
- 將您記下的值輸入到以下欄位:
在 Issuer (發行者),輸入發行者值。
在 Authorization endpoint (授權端點),輸入 authorization_endpoint 值。
在 Token endpoint (權杖端點),輸入 token_endpoint 值。
在 User info endpoint (使用者資訊端點),輸入 userinfo_endpoint 值。
在 Client ID (用戶端 ID),請輸入您的應用程式用戶端 ID。
在 Client secret (用戶端密碼),請輸入您的應用程式用戶端密碼。
- 選擇 Save (儲存)。
測試設定
請完成下列步驟:
- 在您的瀏覽器中,輸入您的 Application Load Balancer 的網址。
- 確認您是否已重新導向至 Cognito 託管的 UI。
- 使用有效的使用者憑證登入。
**注意:**為避免錯誤,請確保所有網址都使用小寫字元。
相關資訊
透過 Application Load Balancer 內建驗證簡化登入
使用 Application Load Balancer 驗證使用者
Application Load Balancer 的接聽程式規則
OIDC 使用者集區 IdP 驗證流程