Hướng Dẫn Chi Tiết Đăng Nhập SSO Với AWS Cognito và Google Chuyên mục Devops 2025-03-28 1 Lượt xem 1 Lượt thích 0 Bình luận
Single Sign-On (SSO) giúp người dùng đăng nhập vào nhiều ứng dụng chỉ với một lần xác thực, giúp cải thiện trải nghiệm và bảo mật. AWS Cognito hỗ trợ SSO thông qua OpenID Connect (OIDC) hoặc SAML, và trong bài viết này, mình sẽ hướng dẫn cách tích hợp SSO với Google.
1. Tạo User Pool trên AWS Cognito
Bước 1: Tạo User Pool
-
Truy cập AWS Cognito.
-
Chọn Create a user pool.
-
Đặt tên cho User Pool (VD: AppSSO).
-
Trong Sign-in options, chọn Email để cho phép đăng nhập bằng email.
-
Cấu hình các tùy chọn khác theo nhu cầu, sau đó nhấn Create Pool.
Hoặc có thể tạo qua CLI
aws cognito-idp create-user-pool \
--pool-name "PasswordlessOtpUserPool" \
--username-configuration CaseSensitive=false \
--policies '{
"PasswordPolicy": {
"MinimumLength": 16,
"RequireUppercase": true,
"RequireLowercase": true,
"RequireNumbers": true,
"RequireSymbols": true
}
}' \
--schema '[
{
"Name": "email",
"AttributeDataType": "String",
"Mutable": false,
"Required": true,
"StringAttributeConstraints": {
"MinLength": "8"
}
}
]'
Bước 2: Tạo App Client
-
Trong User Pool > App clients.
-
Chọn Create app client.
-
Nhập App client name (VD: AppDevelopAppClient).
-
Sau đó Define your application
-
Nhấn Create app client.
Hoặc bạn có thể tạo bằng CLI
aws cognito-idp create-user-pool-client \
--user-pool-id "ap-northeast-1_Ohv23QKY65" \
--client-name "appDevelopAppClient" \
--generate-secret
2. Cấu Hình Domain
-
Chuyển đến Branding → Domain name.
-
Chọn một subdomain cho Cognito, ví dụ:
https://app-develop-auth.auth.ap-northeast-1.amazoncognito.com
-
Nhấn Save changes.
3. Cấu Hình Google Identity Provider (IdP)
Bước 1: Tạo OAuth Credentials trên Google Cloud Console
-
Truy cập Google Cloud Console.
-
Chọn dự án hoặc tạo mới.
-
Vào APIs & Services > Credentials.
-
Chọn Create Credentials > OAuth Client ID.
-
Trong Application type, chọn Web application.
-
Trong Authorized redirect URIs, nhập:
-
https://app-develop-auth.auth.ap-northeast-1.amazoncognito.com/oauth2/idpresponse
-
-
Nhấn Create để lấy Client ID & Client Secret.
Bước 2: Cấu Hình Google IdP Trên AWS Cognito
-
Truy cập Cognito User Pool > Social and custom providers.
-
Chọn Google.
-
Nhập Client ID và Client Secret từ Google.
-
Trong Authorize scope, nhập:
openid email profile
-
Nhấn Create identity provider.
3. Cấu Hình App Client Cho SSO
-
Vào Applications > App clients.
-
Chọn App client đã tạo.
- Chọn tab Login pages
- Chỉnh sửa Managed login pages configuration
-
Trong Identity providers, chọn Google.
-
Trong OAuth 2.0 grant types, chọn Authorization code grant.
-
Trong Allowed callback URLs, nhập url callback trong backend của bạn để nhận AUTH_CODE:
-
http://localhost:8000/auth/google/callback
-
- Trong OpenID Connect scopes: Chọn Email, OpenID, Profile
-
Nhấn Save changes.
4. Xây Dựng URL Đăng Nhập SSO
Sau khi hoàn thành cấu hình, người dùng có thể đăng nhập qua đường dẫn sau:
https://app-develop-auth.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize?
client_id=your_client_id
response_type=code&
scope=openid email profile&
redirect_uri=http://localhost:8000/auth/google/callback
Nếu URL này không hoạt động, hãy kiểm tra lại:
-
Client ID có chính xác không?
-
Redirect URI đã được thêm đúng vào cả Cognito và Google chưa?
-
Scope có khớp với cấu hình IdP không?
5. Xử Lý Callback Tại Backend
Sau khi người dùng đăng nhập thành công, Google sẽ chuyển hướng về http://localhost:8000/auth/google/callback?code=<AUTHORIZATION_CODE>. Backend cần dùng mã này để lấy Access Token.
Ví dụ với Flask:
from flask import Flask, request, redirect
import requests
app = Flask(__name__)
CLIENT_ID = "50sfg4g8h7v73bh88smatuhpie"
CLIENT_SECRET = "<CLIENT_SECRET>"
TOKEN_URL = "https://liveapp-develop-auth.auth.ap-northeast-1.amazoncognito.com/oauth2/token"
@app.route("/auth/google/callback")
def callback():
code = request.args.get("code")
data = {
"grant_type": "authorization_code",
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"code": code,
"redirect_uri": "http://localhost:8000/auth/google/callback"
}
response = requests.post(TOKEN_URL, data=data)
return response.json()
if __name__ == "__main__":
app.run(port=8000)
6. Kiểm Tra Đăng Nhập Thành Công
Sau khi xác thực, nếu API trả về id_token, bạn có thể giải mã để lấy thông tin user:
import jwt
id_token = response.json().get("id_token")
decoded_token = jwt.decode(id_token, options={"verify_signature": False})
print(decoded_token)
7. Kết Luận
Bạn đã hoàn thành tích hợp SSO Google với AWS Cognito! Nếu có vấn đề xảy ra, hãy kiểm tra kỹ:
-
Cấu hình Google IdP trên Cognito.
-
Redirect URI khớp giữa Google Console và Cognito.
-
App client đã bật cả Google và Cognito User Pool.
Hy vọng bài viết này giúp bạn triển khai SSO dễ dàng! 🚀
Bình luận (0)