Chuyển tới nội dung chính

OpenID Connect (OIDC)

Tổng quan

OIDC (OpenID Connect) Policy cho phép xác thực và ủy quyền cho các API bằng cách tích hợp với một Nhà cung cấp OIDC. Điều này đảm bảo rằng chỉ những người dùng đã xác thực mới có thể truy cập API, thông qua cách tiếp cận dựa trên token hoặc một quy trình ủy quyền.

Chi tiết cấu hình

Đường dẫn yêu cầu / Đường dẫn không yêu cầu

  • Required Path: Xác thực OIDC chỉ được thực thi cho các đường dẫn được liệt kê.
  • Not Required Path: Xác thực OIDC bị bỏ qua cho các đường dẫn được liệt kê, nhưng được thực thi cho tất cả các đường dẫn khác.
  • Nếu không có đường dẫn nào được chỉ định, xác thực OIDC sẽ áp dụng cho tất cả các đường dẫn.
  • Việc chuyển đổi giữa các tùy chọn đường dẫn sẽ yêu cầu xác nhận.

Cấu hình loại cấp phép

Chính sách OIDC hỗ trợ hai Grant Types, xác định quy trình xác thực:

  • Authorization Code Grant: Chuyển hướng người dùng đến nhà cung cấp OIDC để xác thực.
  • Password Grant: Trực tiếp trao đổi thông tin xác thực của người dùng để lấy một ID token.

Mỗi loại cấp phép có bộ cấu hình riêng:

Authorization Code Grant:

Quy trình này chủ yếu được sử dụng cho web applications, nơi người dùng xác thực qua một trang đăng nhập.

Configuration FieldDescription
RealmTên của miền xác thực. Ví dụ: realms_name
Client IDĐịnh danh duy nhất được cấp bởi nhà cung cấp OIDC.
Client SecretMật khẩu của client cần thiết cho xác thực.
DiscoveryURL đến điểm cuối khám phá của nhà cung cấp (ví dụ: https://oidcprovider/.well-known/openid-configuration).
Logout PathĐiểm cuối đăng xuất cho người dùng (ví dụ: /logout).
Redirect URI After LogoutTham số và giá trị URI chuyển hướng cho đường dẫn đăng xuất
Bearer OnlyXác định xem token bearer có cần thiết hay không: có (chỉ xác thực bằng token) hoặc không (cho phép cả xác thực bằng token và chuyển hướng đăng nhập).
ScopeXác định mức độ truy cập (mặc định: openid).
Introspection EndpointURL để xác thực token.
Login URLĐiểm cuối API cho đăng nhập người dùng.
Cookie DomainMiền liên quan đến cookie xác thực (ví dụ: skapim.com).
Bypass Header NameCho phép bỏ qua xác thực cho các yêu cầu cụ thể bằng cách sử dụng một khóa tiêu đề (ví dụ: x-oidc-api-key).
Bypass KeyGiá trị khóa bỏ qua thực tế.
Refresh Token ExpirationThời gian hết hạn token (mặc định: 3600 giây).
SameSiteCài đặt cookie để kiểm soát việc xử lý yêu cầu giữa các trang. Tùy chọn: Lax, Strict, hoặc None.
SecureBật hoặc tắt cookie bảo mật (mặc định: false).
Unauth ActionXác định hành vi khi xác thực thất bại. Tùy chọn: Chuyển hướng đến trang đăng nhập hoặc Trả về 401 (Từ chối).
Allow IP / Deny IPCho phép hoặc chặn các IP cụ thể khỏi xác thực OIDC.

Authorization Code Grant

Password Grant:

Quy trình này thường được sử dụng cho machine-to-machine authentication hoặc các client đáng tin cậy.

Configuration FieldDescription
RealmTên của miền xác thực. Ví dụ: auth
Client IDĐịnh danh duy nhất được cấp bởi nhà cung cấp OIDC (ví dụ: account).
Client SecretMật khẩu của client cần thiết cho xác thực.
DiscoveryURL đến điểm cuối khám phá của nhà cung cấp (ví dụ: https://oidcprovider/.well-known/openid-configuration).
Logout PathĐiểm cuối đăng xuất cho người dùng (ví dụ: /Logout).
Redirect URI pathĐiểm cuối để chuyển hướng người dùng sau khi đăng nhập (ví dụ: /auth/api/login).
ScopeXác định mức độ truy cập (mặc định: openid).
SameSiteCài đặt cookie để kiểm soát việc xử lý yêu cầu giữa các trang. Tùy chọn: Lax, Strict, hoặc None.
SecureChuyển đổi để bật / tắt tùy chọn bảo mật
Refresh Token ExpirationThời gian hết hạn token (mặc định: 3600 giây).
Login URLĐiểm cuối API cho đăng nhập người dùng.
Session NameXác định tên lưu trữ phiên (ví dụ: apim_prod_session).
Cookie DomainMiền liên quan đến cookie xác thực (ví dụ: skapim.com).
Bypass Header NameCho phép bỏ qua xác thực cho các yêu cầu cụ thể bằng cách sử dụng một khóa tiêu đề (ví dụ: x-oidc-api-key).
Bypass KeyGiá trị khóa bỏ qua thực tế.
Redirect After Login URIURL để chuyển hướng người dùng sau khi đăng nhập thành công.
Redirect After Logout URIURL để chuyển hướng người dùng sau khi đăng xuất.

Lưu ý:

  • Authorization Code Grant yêu cầu chuyển hướng đến trang đăng nhập, trong khi Password Grant là một yêu cầu API trực tiếp.
  • Bearer Only Mode:
    • Nếu được đặt thành có, chỉ cho phép xác thực dựa trên token.
    • Nếu được đặt thành không, cả chuyển hướng đăng nhập và xác thực bằng token đều được hỗ trợ.

Lựa chọn cơ sở dữ liệu Redis

Dữ liệu phiên có thể được lưu trữ trong các loại cơ sở dữ liệu Redis khác nhau. Redis type được chọn xác định các cấu hình cần được thiết lập.

APIM Redis (Default)
  • Sử dụng APIM Redis tích hợp sẵn cho lưu trữ phiên.
  • Không cần cấu hình bổ sung.
Custom Redis
  • Cho phép kết nối đến một phiên bản Redis bên ngoài.
Configuration FieldDescription
Redis HostĐịa chỉ của máy chủ Redis (ví dụ: 127.0.0.1).
Redis PortSố cổng của máy chủ Redis (ví dụ: 6379).
Redis PasswordMật khẩu cho xác thực.
Redis DatabaseXác định chỉ số cơ sở dữ liệu nào sẽ sử dụng (ví dụ: 1).
Redis Pool SizeSố lượng kết nối tối đa trong pool kết nối Redis (mặc định: 1000).
Redis Pool BacklogSố lượng yêu cầu tối đa đang chờ một kết nối khả dụng (mặc định: 30).

Redis Cluster
  • Sử dụng thiết lập Redis phân tán cho lưu trữ phiên.
Configuration FieldDescription
Redis Cluster NodesĐịa chỉ của các nút trong cụm (ví dụ: redis-cluster.apim:6379).
Redis Cluster PasswordMật khẩu cho xác thực.
Redis Cluster NameXác định tên cụm (ví dụ: kong_redis_cluster).
Redis Connect TimeoutThời gian chờ để thiết lập kết nối Redis (mặc định: 1000ms).
Redis Read TimeoutThời gian chờ để đọc dữ liệu từ Redis (mặc định: 1000ms).
Redis Send TimeoutThời gian chờ để gửi dữ liệu đến Redis (mặc định: 1000ms).
Redis Pool SizeSố lượng kết nối tối đa trong pool kết nối Redis (mặc định: 1000).
Redis Pool BacklogSố lượng kết nối đang chờ tối đa (mặc định: 30).
Redis Keepalive TimeoutThời gian nhàn rỗi tối đa trước khi kết nối Redis bị đóng (mặc định: 55000ms).

Ghi chú bổ sung về hành vi xác thực OIDC

OIDC (OpenID Connect) cho phép các ứng dụng khách xác thực người dùng thông qua một Nhà cung cấp OIDC bên ngoài.

Hành vi của Đường dẫn Đăng xuất và URI Chuyển hướng

Khi cấu hình Đường dẫn Đăng xuất và URI Chuyển hướng Sau Đăng xuất, hành vi phụ thuộc vào cấu trúc của Cổng API của bạn:

  • Giả sử URL Cổng của bạn là https://your.domain.com và Đường dẫn Cơ sở của API là /basePath.
  • Nếu bạn đặt Đường dẫn Đăng xuất trong chính sách OIDC là /logout, thì URL đăng xuất đầy đủ sẽ trở thành: https://your.domain.com/basePath/logout
  • Khi URL này được gọi, quá trình đăng xuất được xử lý nội bộ bởi Nhà cung cấp OIDC.
  • Sau khi đăng xuất, trình duyệt sẽ được chuyển hướng đến URI Chuyển Hướng Sau Đăng Xuất (tức là giá trị redirect_uri), điều này phải được xác định rõ ràng trong yêu cầu.
ghi chú

Nếu URL đăng xuất đầy đủ và redirect_uri không được thiết lập đúng cách, quá trình đăng xuất có thể không chuyển hướng như mong đợi.

Hai Phương Thức Xác Thực Được Hỗ Trợ

OIDC cho phép hai cách để thực hiện xác thực:

  1. Màn hình đăng nhập được chuyển hướng qua trình duyệt: Trình duyệt được chuyển hướng đến trang đăng nhập OIDC để xác thực người dùng.
  2. ID token trong yêu cầu: Khách hàng gửi ID token trực tiếp qua HTTP mà không chuyển hướng người dùng.

Hành vi của các phương thức này phụ thuộc vào cài đặt bearerOnly:

Giá trị bearerOnlyHành vi
khôngCả hai phương thức (1) và (2) đều được phép.
Chỉ phương thức (2) được phép. Hệ thống không chuyển hướng đến trang đăng nhập.

Xác Thực Token và Định Dạng Header

  • Để xác thực ID token bằng phương thức (2), bạn phải cấu hình Điểm Cuối Kiểm Tra — điểm cuối kiểm tra tính hợp lệ của token.
  • Khi gọi API với ID token, hãy bao gồm token trong header yêu cầu theo định dạng sau:
Authorization: bearer your_ID_token