Quay lại

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    comment-3 Created with Sketch Beta. 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

  1. Truy cập AWS Cognito.

  2. Chọn Create a user pool.

  3. Đặt tên cho User Pool (VD: AppSSO).

  4. Trong Sign-in options, chọn Email để cho phép đăng nhập bằng email.

  5. 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

  1. Trong User Pool > App clients.

  2. Chọn Create app client.

  3. Nhập App client name (VD: AppDevelopAppClient).

  4. Sau đó Define your application

  5. 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

  1. Truy cập Google Cloud Console.

  2. Chọn dự án hoặc tạo mới.

  3. Vào APIs & Services > Credentials.

  4. Chọn Create Credentials > OAuth Client ID.

  5. Trong Application type, chọn Web application.

  6. Trong Authorized redirect URIs, nhập:

    • https://app-develop-auth.auth.ap-northeast-1.amazoncognito.com/oauth2/idpresponse
  7. Nhấn Create để lấy Client ID & Client Secret.

Bước 2: Cấu Hình Google IdP Trên AWS Cognito

  1. Truy cập Cognito User Pool > Social and custom providers.

  2. Chọn Google.

  3. Nhập Client IDClient Secret từ Google.

  4. Trong Authorize scope, nhập:

    openid email profile
  5. Nhấn Create identity provider.

3. Cấu Hình App Client Cho SSO

  1. Vào Applications > App clients.

  2. Chọn App client đã tạo.

  3. Chọn tab Login pages
  4. Chỉnh sửa Managed login pages configuration
  5. Trong Identity providers, chọn Google.

  6. Trong OAuth 2.0 grant types, chọn Authorization code grant.

  7. Trong Allowed callback URLs, nhập url callback trong backend của bạn để nhận AUTH_CODE:

    1. http://localhost:8000/auth/google/callback
  8. Trong OpenID Connect scopes: Chọn Email, OpenID, Profile
  9. 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)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday