DEV Community

Cover image for Hướng Dẫn OpenID Connect: Từng Bước Chi Tiết
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

Hướng Dẫn OpenID Connect: Từng Bước Chi Tiết

OpenID Connect đã trở thành tiêu chuẩn công nghiệp cho việc xác thực hiện đại, bảo mật và đăng nhập một lần (SSO). Nếu bạn cần một hướng dẫn OpenID Connect rõ ràng, thực tiễn và dễ áp dụng cho dự án của mình, bài viết này sẽ giúp bạn hiểu OpenID Connect là gì, các khái niệm then chốt, luồng xác thực, cách triển khai thực tế, cùng ví dụ và hướng dẫn từng bước.

Dùng thử Apidog ngay hôm nay

OpenID Connect là gì? (Kiến thức cơ bản về OpenID Connect)

OpenID Connect là giao thức xác thực xây dựng trên OAuth 2.0. OAuth 2.0 dùng cho ủy quyền, còn OpenID Connect dùng cho xác thực—giúp xác minh danh tính và trả về thông tin hồ sơ an toàn.

  • Xác thực an toàn: Loại bỏ đăng nhập tự phát không bảo mật.
  • SSO: Một lần đăng nhập, dùng cho nhiều ứng dụng.
  • Khả năng tương tác: Phù hợp web, mobile, API.
  • Thông tin hồ sơ: Dữ liệu danh tính trả về dạng JWT (ID Token).

Các khái niệm chính trong OpenID Connect

  • Nhà cung cấp danh tính (IdP): Dịch vụ xác thực (Google, Auth0, Okta...)
  • Client (Relying Party): Ứng dụng của bạn cần xác thực.
  • Người dùng cuối: Người thực hiện xác thực.
  • Authorization Server: Thường là IdP, cấp token sau xác thực.
  • ID Token: JWT chứa thông tin danh tính.
  • Access Token: Token từ OAuth 2.0 dùng truy cập API bảo mật.
  • Discovery Document: Endpoint cung cấp metadata và các URL xác thực.

Luồng xác thực OpenID Connect thực tế

Dưới đây là từng bước cụ thể để triển khai xác thực OpenID Connect.

1. Người dùng bắt đầu đăng nhập

Người dùng nhấn "Đăng nhập bằng OpenID Connect" trên ứng dụng.

2. Client chuyển hướng tới IdP

Ứng dụng chuyển hướng trình duyệt tới endpoint ủy quyền của IdP với các tham số:

  • client_id
  • redirect_uri
  • scope (bắt buộc openid)
  • state
  • response_type (code cho Authorization Code Flow)

Ví dụ URL:

https://idp.example.com/authorize?
  client_id=YOUR_CLIENT_ID
  &redirect_uri=https://yourapp.com/callback
  &scope=openid%20profile%20email
  &response_type=code
  &state=randomState123

3. Người dùng xác thực

IdP hiển thị form đăng nhập; người dùng nhập thông tin và cấp quyền.

4. IdP chuyển hướng lại ứng dụng

Sau xác thực thành công, IdP chuyển hướng về redirect_uri kèm authorization code.

https://yourapp.com/callback?code=AUTH_CODE&state=randomState123

5. Backend trao đổi mã lấy token

Gửi HTTP POST đến endpoint token của IdP.

POST /token
Host: idp.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code=AUTH_CODE
&redirect_uri=https://yourapp.com/callback
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET

6. Nhận token từ IdP

Phản hồi gồm:

  • id_token (JWT)
  • access_token
  • (tùy chọn) refresh_token
{
  "access_token": "eyJ...abc",
  "id_token": "eyJ...xyz",
  "expires_in": 3600,
  "token_type": "Bearer"
}

7. Xác thực và sử dụng token

Ứng dụng xác thực id_token (chữ ký, aud, exp, ...) và đăng nhập user. access_token dùng cho các API protected.

Các luồng xác thực OpenID Connect

Authorization Code Flow là luồng nên dùng cho web app:

  • Bảo mật (token không lộ ở browser).
  • Xác thực phía máy chủ.
  • Phù hợp ứng dụng có backend.

Không dùng Implicit Flow: Không an toàn (token lộ qua URL), nên dùng Authorization Code Flow kết hợp PKCE cho SPA và mobile app.

Giải mã ID Token

id_token là JWT chứa thông tin user, ví dụ:

{
  "iss": "https://idp.example.com",
  "sub": "1234567890",
  "aud": "YOUR_CLIENT_ID",
  "exp": 1712345678,
  "iat": 1712341678,
  "email": "user@example.com",
  "name": "Jane Doe"
}
  • iss: Nhà phát hành
  • sub: ID user
  • aud: ID client
  • exp: Hết hạn
  • email, name: Claim tiêu chuẩn

Mẹo: Luôn xác thực chữ ký và các claim trong id_token trước khi đăng nhập.

Ví dụ thực tế: OpenID Connect với Python

Bước 1: Tạo URL ủy quyền

import urllib.parse

params = {
    "client_id": "YOUR_CLIENT_ID",
    "redirect_uri": "https://yourapp.com/callback",
    "response_type": "code",
    "scope": "openid profile email",
    "state": "randomState123"
}
auth_url = "https://idp.example.com/authorize?" + urllib.parse.urlencode(params)
print(auth_url)

Bước 2: Trao đổi authorization code lấy token

import requests

token_data = {
    "grant_type": "authorization_code",
    "code": "AUTH_CODE",
    "redirect_uri": "https://yourapp.com/callback",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET"
}
resp = requests.post("https://idp.example.com/token", data=token_data)
tokens = resp.json()
print(tokens)

Bước 3: Giải mã và xác thực ID Token

import jwt

id_token = tokens['id_token']
decoded = jwt.decode(id_token, options={"verify_signature": False})
print(decoded)

Lưu ý: Trong production, phải xác thực chữ ký bằng public key của IdP.

Các trường hợp ứng dụng OpenID Connect

1. SSO đa ứng dụng

Đăng nhập một lần qua Google, truy cập mọi ứng dụng nội bộ/khách hàng với cùng session.

2. Xác thực API an toàn

Dùng Apidog để thiết kế, kiểm thử endpoint API xác thực qua ID Token.

3. Đăng nhập xã hội

Tích hợp "Đăng nhập bằng Google/Microsoft" theo OpenID Connect nhanh chóng.

4. Xác thực trên mobile app

Sử dụng cùng một flow xác thực trên mobile với deep link hoặc webview.

Kiểm thử và gỡ lỗi OpenID Connect với Apidog

Khi tích hợp OpenID Connect, việc kiểm thử API là cực kỳ quan trọng. Apidog giúp bạn:

  • Kiểm thử request API: Mô phỏng request lấy token, xác thực phản hồi.
  • Mock endpoint: Dễ dàng tạo IdP giả lập để test luồng xác thực.
  • Tài liệu hóa API: Ghi chú, chia sẻ và cộng tác với frontend, bảo mật.

Tích hợp Apidog vào quy trình giúp tăng tốc phát triển, kiểm thử, và giảm lỗi luồng xác thực.

Best Practices khi triển khai OpenID Connect

  • Luôn xác thực ID token: Kiểm tra signature, issuer, audience, exp.
  • Dùng HTTPS 100%: Không truyền token qua HTTP.
  • Lưu trữ bí mật an toàn: Không hard-code client_secret.
  • Xử lý lỗi đúng chuẩn: Đăng nhập thất bại, token hết hạn, revoke phải rõ ràng.
  • Luôn cập nhật: Theo sát thay đổi của chuẩn, cập nhật library thường xuyên.

Kết luận & Hành động tiếp theo

Bạn đã có đầy đủ kiến thức thực tiễn về OpenID Connect: giao thức, luồng xác thực, triển khai và các tình huống điển hình.

Các bước tiếp theo:

  1. Đăng ký ứng dụng với IdP uy tín (Google, Auth0, Okta,...).
  2. Triển khai Authorization Code Flow theo hướng dẫn ở trên.
  3. Kiểm thử luồng xác thực với Apidog để đảm bảo bảo mật.
  4. Đọc thêm về các chủ đề nâng cao như dynamic client registration, linked identity.

Sẵn sàng áp dụng xác thực hiện đại, bảo mật cho mọi ứng dụng. Chúc bạn code hiệu quả!

Top comments (0)