Chính sách về Xác nhận SAML

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Nội dung

  • Xác thực và uỷ quyền đến: Xác thực chính sách xác nhận SAML
    Loại chính sách SAML cho phép proxy API xác thực các câu nhận định SAML được đính kèm vào các yêu cầu SOAP gửi đến. Chính sách SAML xác thực các tin nhắn đến có chứa cụm từ xác nhận SAML được ký bằng chữ ký số, từ chối nếu tin nhắn không hợp lệ và thiết lập các biến cho phép các chính sách bổ sung hoặc chính các dịch vụ phụ trợ để xác thực thêm thông tin trong phần xác nhận.
  • Tạo mã thông báo đi: Tạo Chính sách xác nhận SAML
    Loại chính sách SAML cho phép proxy API đính kèm câu nhận định SAML vào yêu cầu XML gửi đi. Sau đó, những câu nhận định đó sẽ có sẵn để cho phép các dịch vụ phụ trợ áp dụng thêm quá trình xử lý bảo mật cho việc xác thực và uỷ quyền.

Mẫu

Tạo câu xác nhận SAML

<GenerateSAMLAssertion name="SAML" ignoreContentType="false">
  <CanonicalizationAlgorithm />
  <Issuer ref="reference">Issuer name</Issuer>
  <KeyStore>
    <Name ref="reference">keystorename</Name>
    <Alias ref="reference">alias</Alias>
  </KeyStore>
  <OutputVariable>
    <FlowVariable>assertion.content</FlowVariable>
    <Message name="request">
      <Namespaces>
        <Namespace prefix="test">http://www.example.com/test</Namespace>
      </Namespaces>
      <XPath>/envelope/header</XPath>
    </Message>
  </OutputVariable>
  <SignatureAlgorithm />
  <Subject ref="reference">Subject name</Subject>
  <Template ignoreUnresolvedVariables="false">
    <!-- A lot of XML goes here, in CDATA, with {} around
         each variable -->
  </Template>
</GenerateSAMLAssertion>

Tạo câu xác nhận SAML

Xác thực câu nhận định SAML

<ValidateSAMLAssertion name="SAML" ignoreContentType="false">
  <Source name="request">
    <Namespaces>
      <Namespace prefix='soap'>http://schemas.xmlsoap.org/soap/envelope/</Namespace>
      <Namespace prefix='wsse'>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd</Namespace>
      <Namespace prefix='saml'>urn:oasis:names:tc:SAML:2.0:assertion</Namespace>
    </Namespaces>
    <AssertionXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</AssertionXPath>
    <SignedElementXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</SignedElementXPath>
  </Source>
  <TrustStore>TrustStoreName</TrustStore>
  <RemoveAssertion>false</RemoveAssertion>
</ValidateSAMLAssertion>

Xác thực câu nhận định SAML


Tham chiếu phần tử

Tạo xác nhận SAML

Tên trường Nội dung mô tả
name thuộc tính Tên của trường hợp chính sách. Tên phải là duy nhất trong tổ chức. Bạn chỉ được dùng các ký tự sau đây trong tên: A-Z0-9._\-$ %. Tuy nhiên, Giao diện người dùng quản lý thực thi các hạn chế bổ sung, chẳng hạn như tự động xoá các ký tự không phải là chữ và số.
ignoreContentType thuộc tính Một giá trị boolean có thể được đặt thành true hoặc false. Theo mặc định, câu nhận định sẽ không được tạo nếu loại nội dung thông báo không phải là Content-Type XML. Nếu bạn đặt giá trị này thành true thì thông báo sẽ được coi là XML bất kể loại nội dung.
Issuer
Giá trị nhận dạng duy nhất của nhà cung cấp danh tính. Nếu có thuộc tính ref không bắt buộc, thì giá trị của Trình phát hành sẽ được gán trong thời gian chạy dựa trên biến đã chỉ định. Nếu không có thuộc tính ref không bắt buộc, thì giá trị của Trình phát hành sẽ được sử dụng.
KeyStore
Tên của Kho khoá chứa khoá riêng tư và bí danh của khoá riêng tư dùng để ký chữ ký số các câu nhận định SAML.
OutputVariable
FlowVariable
Message Mục tiêu của chính sách. Các giá trị hợp lệ là message, requestresponse. Khi bạn đặt thành message, chính sách sẽ truy xuất đối tượng thông báo theo điều kiện dựa trên điểm đính kèm của chính sách. Khi được đính kèm vào Luồng yêu cầu, chính sách này sẽ phân giải message để yêu cầu và khi được đính kèm vào Luồng phản hồi, chính sách này sẽ phân giải message thành phản hồi.
XPath Một biểu thức XPath cho biết phần tử trên tài liệu XML gửi đi mà chính sách sẽ đính kèm câu nhận định SAML.
SignatureAlgorithm SHA1 hoặc SHA256
Subject
Giá trị nhận dạng duy nhất của chủ thể trong câu xác nhận SAML. Nếu có thuộc tính ref không bắt buộc, thì giá trị của Tiêu đề sẽ được gán trong thời gian chạy dựa trên biến đã chỉ định. Nếu có thuộc tính ref không bắt buộc, thì giá trị của Tiêu đề sẽ được sử dụng.
Template
Nếu có, câu nhận định sẽ được tạo bằng cách chạy mẫu này, thay thế mọi thứ được biểu thị là {} bằng biến tương ứng, sau đó ký kết quả dưới dạng kỹ thuật số. Mẫu này được xử lý theo các quy tắc của chính sách AttributionMessage. Xem Chính sách về việc chỉ định tin nhắn.

Xác thực xác nhận SAML

Tên trường Nội dung mô tả
name thuộc tính
Tên của trường hợp chính sách. Tên phải là duy nhất trong tổ chức. Bạn chỉ được dùng các ký tự sau đây trong tên: A-Z0-9._\-$ %. Tuy nhiên, Giao diện người dùng quản lý thực thi các hạn chế bổ sung, chẳng hạn như tự động xoá các ký tự không phải là chữ và số.
ignoreContentType thuộc tính Một giá trị boolean có thể được đặt thành true hoặc false. Theo mặc định, câu nhận định sẽ không được tạo nếu loại nội dung thông báo không phải là Content-Type XML. Nếu bạn đặt giá trị này thành true, thì thông báo sẽ được coi là XML bất kể loại nội dung.
Source Mục tiêu của chính sách. Các giá trị hợp lệ là message, requestresponse. Khi bạn đặt thành message, chính sách sẽ truy xuất đối tượng thông báo theo điều kiện dựa trên điểm đính kèm của chính sách. Khi được đính kèm vào Luồng yêu cầu, chính sách này sẽ phân giải message để yêu cầu và khi được đính kèm vào Luồng phản hồi, chính sách này sẽ phân giải message thành phản hồi.
XPath
Không dùng nữa. Con của Source. Hãy sử dụng AssertionXPathSignedElementXPath.
AssertionXPath
Con của Source. Một biểu thức XPath cho biết phần tử trên tài liệu XML gửi đến mà từ đó chính sách có thể trích xuất câu nhận định SAML.
SignedElementXPath
Con của Source. Một biểu thức XPath cho biết phần tử trên tài liệu XML gửi đến mà chính sách có thể trích xuất phần tử đã ký. Mã này có thể khác hoặc giống với XPath dành cho AssertionXPath.
TrustStore
Tên của TrustStore chứa các chứng chỉ X.509 đáng tin cậy dùng để xác thực chữ ký số trong các câu nhận định SAML.
RemoveAssertion
Một giá trị boolean có thể được đặt thành true hoặc false. Khi true, xác nhận SAML sẽ bị xoá khỏi thông báo yêu cầu trước khi thông báo được chuyển tiếp đến dịch vụ phụ trợ.

Lưu ý về cách sử dụng

Thông số kỹ thuật của Ngôn ngữ đánh dấu xác nhận bảo mật (SAML) xác định các định dạng và giao thức cho phép các ứng dụng trao đổi thông tin có định dạng XML để xác thực và uỷ quyền.

"Xác nhận bảo mật" là một mã thông báo đáng tin cậy mô tả thuộc tính của ứng dụng, người dùng ứng dụng hoặc một số người tham gia khác trong giao dịch. Tính năng xác nhận bảo mật được quản lý và sử dụng bởi 2 loại thực thể:

  • Nhà cung cấp danh tính: Thay mặt người tham gia tạo ra các câu nhận định bảo mật
  • Nhà cung cấp dịch vụ: Xác thực các câu nhận định bảo mật thông qua mối quan hệ đáng tin cậy với các nhà cung cấp danh tính

Nền tảng API có thể đóng vai trò là nhà cung cấp danh tính và nhà cung cấp dịch vụ. Ứng dụng này hoạt động như một nhà cung cấp danh tính bằng cách tạo câu nhận định và đính kèm vào thông báo yêu cầu, cung cấp những câu nhận định đó để các dịch vụ phụ trợ xử lý. Thư viện này đóng vai trò là nhà cung cấp dịch vụ bằng cách xác thực các câu nhận định cho thông báo yêu cầu gửi đến.

Loại chính sách SAML hỗ trợ các câu xác nhận SAML khớp với phiên bản 2.0 của Thông số kỹ thuật cốt lõi của SAML và phiên bản 1.0 của thông số kỹ thuật của Cấu hình mã thông báo SAML WS-Security.

Tạo xác nhận SAML

Xử lý chính sách:

  1. Nếu thông báo không phải là XML và IgnoreContentType không được đặt thành true, thì sẽ gây ra lỗi.
  2. Nếu bạn đã đặt "Mẫu", hãy xử lý mẫu như được mô tả trong chính sách AttributionMessage. Nếu thiếu bất kỳ biến nào và chưa đặt IgnoreUnresolvedVariables, hãy nêu lỗi.
  3. Nếu không đặt "Mẫu", hãy tạo một câu nhận định bao gồm giá trị của thông số Chủ đề và Nhà phát hành hoặc các tham chiếu của các thông số đó.
  4. Ký câu nhận định bằng khoá được chỉ định.
  5. Thêm câu nhận định vào thông báo tại XPath được chỉ định.

Xác thực xác nhận SAML

Xử lý chính sách:

  1. Chính sách này sẽ kiểm tra thư đến để xác minh rằng loại nội dung đa phương tiện của yêu cầu là XML, bằng cách kiểm tra xem loại nội dung có khớp với định dạng text/(.*+)?xml hoặc application/(.*+)?xml hay không. Nếu loại nội dung nghe nhìn không phải là XML và <IgnoreContentType> chưa được đặt, thì chính sách này sẽ gây ra lỗi.
  2. Chính sách này sẽ phân tích cú pháp XML. Nếu quá trình phân tích cú pháp không thành công thì lỗi sẽ xảy ra.
  3. Chính sách này sẽ trích xuất phần tử đã ký và câu nhận định bằng cách sử dụng XPath tương ứng được chỉ định (<SignedElementXPath><AssertionXPath>). Nếu một trong hai đường dẫn này không trả về phần tử thì chính sách sẽ gây ra lỗi.
  4. Chính sách này sẽ xác minh rằng Xác nhận giống với phần tử đã ký hoặc là phần tử con của phần tử đã ký. Nếu không đúng thì chính sách sẽ báo lỗi.
  5. Nếu một trong hai phần tử <NotBefore> hoặc <NotOnOrAfter> có trong câu nhận định, chính sách sẽ kiểm tra dấu thời gian hiện tại so với các giá trị này, như mô tả trong mục 2.5.1 của Lõi SAML.
  6. Chính sách này sẽ áp dụng mọi quy tắc bổ sung để xử lý "Điều kiện" như mô tả trong phần Lõi SAML 2.5.1.1.
  7. Chính sách này sẽ xác thực chữ ký số XML, sử dụng các giá trị của <TrustStore><ValidateSigner> như mô tả ở trên. Nếu xác thực không thành công thì chính sách sẽ phát sinh lỗi.

Sau khi chính sách hoàn tất mà không gây ra lỗi, nhà phát triển proxy có thể chắc chắn về những điều sau:

  • Chữ ký số trong nội dung xác nhận là hợp lệ và có chữ ký của một tổ chức phát hành chứng chỉ (CA) đáng tin cậy
  • Xác nhận có hiệu lực trong khoảng thời gian hiện tại
  • Chủ thể và người đưa ra câu nhận định sẽ được trích xuất và đặt trong các biến luồng. Các chính sách khác có trách nhiệm sử dụng các giá trị này để xác thực bổ sung, chẳng hạn như kiểm tra xem tên chủ đề có hợp lệ hay không hoặc truyền giá trị đó đến một hệ thống mục tiêu để xác thực.

Các chính sách khác, chẳng hạn như ExtractVariables, có thể dùng để phân tích cú pháp XML thô của câu nhận định nhằm xác thực phức tạp hơn.


Biến luồng

Có nhiều thông tin có thể được chỉ định trong xác nhận SAML. Bản thân khẳng định SAML là XML có thể được phân tích cú pháp bằng chính sách ExtractVariables và các cơ chế khác để triển khai quy trình xác thực phức tạp hơn.

Biến Nội dung mô tả
saml.id Mã xác nhận SAML
saml.issuer "Bên phát hành" của khẳng định, được chuyển đổi từ kiểu XML gốc thành một chuỗi
saml.subject Phần "Tiêu đề" của câu nhận định, được chuyển đổi từ kiểu XML gốc thành một chuỗi
saml.valid Trả về true hoặc false dựa trên kết quả kiểm tra tính hợp lệ
saml.issueInstant IssueInstant
saml.subjectFormat Định dạng đối tượng
saml.scmethod Phương thức xác nhận chủ thể
saml.scdaddress Địa chỉ dữ liệu xác nhận chủ thể
saml.scdinresponse Dữ liệu xác nhận chủ thể trong phản hồi
saml.scdrcpt Người nhận dữ liệu xác nhận chủ thể
saml.authnSnooa Phiên AuthnStatement chưa phát hành sau
saml.authnContextClassRef AuthnStatement AuthnContextClassRef
saml.authnInstant AuthnStatement AuthInstant
saml.authnSessionIndex Chỉ mục phiên AuthnStatement

Tham chiếu lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy chứa chính sách này.

Tên lỗi Nguyên nhân Khắc phục
SourceNotConfigured Chưa xác định hoặc để trống một hoặc nhiều phần tử sau đây của Chính sách xác thực xác nhận SAML: <Source>, <XPath>, <Namespaces>, <Namespace>.
TrustStoreNotConfigured Nếu phần tử <TrustStore> trống hoặc không được chỉ định trong chính sách Xác thực SAMLAssertion, thì quá trình triển khai proxy API sẽ không thành công. Bạn phải có kho lưu trữ Trust Store hợp lệ.
NullKeyStoreAlias Nếu phần tử con <Alias> bị trống hoặc không được chỉ định trong phần tử <Keystore> của Tạo chính sách xác nhận SAML, thì quá trình triển khai proxy API sẽ không thành công. Bạn phải có bí danh hợp lệ của Kho khoá.
NullKeyStore Nếu phần tử con <Name> bị để trống hoặc không được chỉ định trong phần tử <Keystore> của chính sách Tạo SAMLAssertion, thì quá trình triển khai proxy API sẽ không thành công. Bạn phải nhập tên Kho khoá hợp lệ.
NullIssuer Nếu phần tử <Issuer> bị trống hoặc không được chỉ định trong chính sách Tạo xác nhận SAML, thì quá trình triển khai proxy API sẽ không thành công. Bạn phải cung cấp một giá trị <Issuer> hợp lệ.

Biến lỗi

Các biến này được đặt khi xảy ra lỗi thời gian chạy. Để biết thêm thông tin, hãy xem Những điều bạn cần biết về lỗi chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi. Tên lỗi là phần cuối cùng của mã lỗi. fault.name = "InvalidMediaTpe"
GenerateSAMLAssertion.failed Đối với cấu hình chính sách xác nhận SAML xác thực, tiền tố lỗi là ValidateSAMLAssertion. GenerateSAMLAssertion.failed = true

Ví dụ về phản hồi lỗi

{
  "fault": {
    "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type",
    "detail": {
      "errorcode": "steps.saml.generate.InvalidMediaTpe"
    }
  }
}

Ví dụ về quy tắc lỗi

<FaultRules>
    <FaultRule name="invalid_saml_rule">
        <Step>
            <Name>invalid-saml</Name>
        </Step>
        <Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
    </FaultRule>
</FaultRules>

Chủ đề có liên quan

Trích xuất biến: Chính sách về Trích xuất biến