Bỏ qua, đến nội dung

Chi tiết luồng xác thực SAML

Mô tả luồng SP-initiated SSO, HTTP POST binding, validation assertion và xử lý RelayState.

Tổng quan luồng

Plugin triển khai SP-initiated SSO với HTTP POST binding: Digiforce (SP) tạo AuthnRequest → redirect user đến IdP → IdP POST SAMLResponse về ACS URL → plugin validate và trích xuất user.

Sequence diagram chi tiết

Chi tiết AuthnRequest

AuthnRequest XML được tạo bởi thư viện @node-saml/node-saml:

FieldGiá trị
IssuerTên authenticator (SP Entity ID)
AssertionConsumerServiceURLACS URL đầy đủ
NameIDPolicyurn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
DestinationIdP SSO URL

AuthnRequest được base64-encode và gửi qua query string SAMLRequest (HTTP-Redirect binding).

RelayState

RelayState mang thông tin redirect URL sau khi đăng nhập thành công:

  1. Client gửi redirect parameter khi gọi saml:getAuthUrl
  2. Server đặt giá trị này làm RelayState trong AuthnRequest
  3. IdP trả lại RelayState nguyên vẹn trong POST SAMLResponse
  4. Server đọc RelayState → redirect user về URL ban đầu

Validation chi tiết

Plugin gọi validatePostResponseAsync() từ @node-saml/node-saml để kiểm tra:

Kiểm traMô tả
Chữ kýVerify XML signature bằng certificate PEM. Tùy signResponse / signAssertion mà verify trên element nào
Thuật toánThuật toán ký phải khớp signatureAlgorithm (sha1/sha256/sha512)
IssuerIssuer trong Response phải khớp idpIssuer
AudienceAudienceRestriction phải chứa SP Entity ID
Thời hạnNotBefore ≤ thời điểm hiện tại ≤ NotOnOrAfter

Trích xuất profile

Sau khi validation thành công, plugin trích xuất thông tin user:

  1. NameID: giá trị chính (thường là email)
  2. Attributes: các claim bổ sung từ IdP (name, department, role...)
  3. Áp dụng field mapping → tạo object local user
  4. Tìm local user theo userBindField → liên kết hoặc tạo mới

Xử lý lỗi

LỗiNguyên nhânGiải pháp
Signature validation failedCertificate không khớpTải lại certificate từ IdP
Issuer mismatchidpIssuer cấu hình saiKiểm tra Entity ID trong IdP metadata
Audience mismatchSP Entity ID khác tên authenticatorĐảm bảo Audience tại IdP = tên authenticator
Assertion expiredClock skew giữa SP và IdPĐồng bộ thời gian (NTP)