首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

SAML 核心技術詳解:安全共享數位身分的標準協定

     編輯:Java 相關知識

前言:數位身分管理的挑戰與 SAML 的使命

Web 專案中,安全永遠是核心考量。使用者面臨密碼疲勞、釣魚攻擊、隱私政策困擾;企業需整合多系統身分、保護核心資料不外洩。SAML (Security Assertion Markup Language) 作為 OASIS 標準,提供安全的單點登入 (SSO) 協定,讓網站間安全交換身分資訊,解決跨域認證授權難題。

SAML 核心概念

  • Assertion(斷言):關於使用者身分的安全陳述,由來源站點簽發,目標站點信任
  • Source Site / Asserting Party(來源站點/斷言方):認證使用者並簽發斷言
  • Destination Site / Relying Party(目標站點/信任方):接收並信任斷言,授予存取權限
  • Protocol(協定):請求/回應模式,定義如何獲取斷言
  • Binding(綁定):協定訊息映射到通訊協定(如 HTTP POST、SOAP、Artifact)

SAML 1.1 基本流程:Artifact 綁定範例

  1. 使用者登入來源站點(如 MegaBank)
  2. 使用者點選連結存取目標站點(如外部應用)
  3. 目標站點重導向使用者至來源站點,附帶 SAMLart(Artifact/瀏覽器憑證)
  4. 來源站點驗證 Artifact,透過 SOAP 回傳包含斷言的 SAML Response
  5. 目標站點驗證斷言,建立使用者會話,授予存取權

SAML Request 範例 (SOAP)

<samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
  MajorVersion="1" MinorVersion="1"
  RequestID="_216.27.61.137.103896224111"
  IssueInstant="2005-03-19T17:04:21.022Z">
  <samlp:AssertionArtifact>AAGZE1RNQJEFzYNCGAGPjWvtDIRSZ4</samlp:AssertionArtifact>
</samlp:Request>

SAML Response 範例

<samlp:Response ... InResponseTo="_216.27.61.137.103896224111">
  <samlp:Status><samlp:StatusCode Value="samlp:Success"/></samlp:Status>
  <saml:Assertion ... Issuer="www.example.com">
    <saml:Conditions NotBefore="..." NotOnOrAfter="..."/> <!-- 10分鐘有效窗口,防重放攻擊 -->
    <saml:AuthenticationStatement AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"
        AuthenticationInstant="...">
      <saml:Subject>
        <saml:NameIdentifier>JSmith</saml:NameIdentifier>
        <saml:SubjectConfirmation>
          <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:artifact-01</saml:ConfirmationMethod>
        </saml:SubjectConfirmation>
      </saml:Subject>
    </saml:AuthenticationStatement>
  </saml:Assertion>
</samlp:Response>

關鍵設計原則:認證與授權分離

  • 來源站點負責 認證(驗證使用者身分),不需知道目標站點資源細節
  • 目標站點負責 授權(決定使用者能存取什麼資源),不需知道認證細節
  • 斷言僅傳遞身分資訊(如姓名、認證方式、時間),不包含權限資料

優勢:來源站點升級認證方式(如改指紋驗證)無需通知目標站點;目標站點調整權限模型不影響來源站點。

SAML 安全機制

  • 傳輸層加密:所有通訊經 SSL/TLS 加密
  • 雙向憑證驗證:來源與目標站點透過 X.509 憑證互相驗證身分
  • 時間窗口:Conditions NotBefore/NotOnOrAfter 限制斷言有效期,防重放攻擊
  • Artifact 解析:敏感斷言不經瀏覽器傳遞,而是由目標站點直接向來源站點透過 SOAP 獲取

對應用程式設計的影響

傳統需使用者名/密碼的 API 需調整:

// 不相容 SAML
public void makeChange(String username, String password, String[] params);

// 相容 SAML:移除密碼參數,改由容器/框架注入已驗證身分
public void makeChange(String[] params); // 使用者身分從 SecurityContext 獲取

登入表單需為 SAML 驗證使用者禁用密碼欄位。

BEA WebLogic Server 9.x 整合 SAML

  • SAML 作為 WebLogic Security Service 一部分,支援 Web Services SSO 與跨域認證共享
  • 配置 SAML Credential Mapper → 來源站點;SAML Identity Asserter → 目標站點
  • 自訂擴展:實作 SAMLCredentialNameMapper、SAMLIdentityAssertionNameMapper,配置於管理主控台
  • 若應用獨立於 WebLogic Security,需自行實作或整合第三方 SAML 庫

開源 SAML 實作選擇

  • OpenSAML:SAML 工具包,建立自訂來源/目標站點
  • Shibboleth:基於 OpenSAML 的跨域 Web SSO 平台
  • SourceID:Java/.NET SAML 1.1 工具包
  • WSS4J:Apache 專案,包含 OpenSAML 部分支援

結語

SAML 為企業應用提供標準化、安全的身分聯合基礎。WebLogic 9.x 內建支援大幅降低整合門檻。無論應用架構如何,皆有多種路徑接入 SAML 生態,實現安全便捷的單點登入體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved