Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Nội dung
- Xác thực và uỷ quyền chiều đến: Xác thực chính sách Khẳng định SAML
Loại chính sách SAML cho phép các proxy API xác thực các khẳng định SAML được đính kèm vào các yêu cầu SOAP chiều đến. Chính sách SAML xác thực các thông báo đến có chứa một câu khẳng định SAML được ký bằng chữ ký số, từ chối các thông báo đó nếu chúng không hợp lệ và đặt các biến cho phép các chính sách bổ sung hoặc chính dịch vụ phụ trợ tự xác thực thêm thông tin trong câu khẳng định. - Tạo mã thông báo đi: Tạo chính sách SAML Assertion
Loại chính sách SAML cho phép các proxy API đính kèm SAML Assertion vào các yêu cầu XML đi. Sau đó, các câu khẳng định đó sẽ có sẵn để cho phép các dịch vụ phụ trợ áp dụng thêm quy trình xử lý bảo mật để xác thực và uỷ quyền.
Mẫu
Tạo câu khẳng định 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 một câu khẳng định SAML
Xác thực câu khẳng đị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 một câu khẳng định SAML
Tài liệu tham khảo về phần tử
Tạo câu lệnh SAML
| Tên trường | Mô tả | ||
|---|---|---|---|
name thuộc tính |
Tên của phiên bản chính sách. Tên này phải là duy nhất trong tổ chức. Bạn chỉ có thể dùng các ký tự sau trong tên: A-Z0-9._\-$
%. Tuy nhiên, Giao diện người dùng quản lý sẽ áp dụng thêm các hạn chế, 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 khẳng định sẽ không được tạo nếu loại nội dung của 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ể Content-type. |
||
Issuer |
Giá trị nhận dạng duy nhất của nhà cung cấp danh tính. Nếu thuộc tính
ref không bắt buộc xuất hiện, thì giá trị của Tổ chức phát hành sẽ được chỉ định tại 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 Tổ chức phát hành sẽ được sử dụng.
|
||
KeyStore |
Tên của KeyStore chứa khoá riêng tư và bí danh của khoá riêng tư dùng để ký kỹ thuật số các câu khẳng định SAML.
|
||
OutputVariable |
|||
FlowVariable |
|||
Message |
Mục tiêu của chính sách. Các giá trị hợp lệ là message, request và response. Khi được đặt thành message, chính sách sẽ có điều kiện truy xuất đối tượng thông báo dựa trên điểm đính kèm của chính sách. Khi được đính kèm vào Flow yêu cầu, chính sách sẽ phân giải message thành yêu cầu và khi được đính kèm vào Flow phản hồi, chính sách 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 đi ra mà chính sách sẽ đính kèm câu khẳng định SAML. | ||
SignatureAlgorithm |
SHA1 hoặc SHA256 | ||
Subject |
Giá trị nhận dạng duy nhất của chủ đề trong câu khẳng định SAML. Nếu có thuộc tính
ref không bắt buộc, thì giá trị của Chủ đề sẽ được chỉ định tại thời gian chạy dựa trên biến đã chỉ định. Nếu thuộc tính ref (không bắt buộc) xuất hiện, thì giá trị của Chủ đề sẽ được dùng.
|
||
Template |
Nếu có, thì câu khẳng định sẽ được tạo bằng cách chạy mẫu này, thay thế mọi thứ được biểu thị bằng
{} bằng biến tương ứng, rồi ký kết kết quả bằng chữ ký số. Mẫu được xử lý theo các quy tắc chính sách AssignMessage.
Xem phần Chỉ định chính sách về thư.
|
||
Xác thực câu lệnh SAML
| Tên trường | Mô tả |
|---|---|
name thuộc tính |
Tên của phiên bản chính sách. Tên này phải là duy nhất trong tổ chức.
Bạn chỉ có thể dùng các ký tự sau trong tên:
A-Z0-9._\-$ %.
Tuy nhiên, Giao diện người dùng quản lý sẽ áp dụng thêm các hạn chế, 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 khẳng định sẽ không được tạo nếu loại nội dung của 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ể Content-type. |
Source |
Mục tiêu của chính sách. Các giá trị hợp lệ là message, request và response. Khi được đặt thành message, chính sách sẽ có điều kiện truy xuất đối tượng thông báo dựa trên điểm đính kèm của chính sách. Khi được đính kèm vào Flow yêu cầu, chính sách sẽ phân giải message thành yêu cầu và khi được đính kèm vào Flow phản hồi, chính sách 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 AssertionXPath và SignedElementXPath.
|
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 đến mà chính sách có thể trích xuất câu khẳng đị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 đến mà chính sách có thể trích xuất phần tử đã ký. XPath này có thể khác hoặc giống với XPath 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ố trên các câu khẳng định SAML.
|
RemoveAssertion |
Một giá trị boolean có thể được đặt thành
true hoặc false. Khi true, câu khẳng định 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
Quy cách 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 ở định dạng XML để xác thực và uỷ quyền.
"Tuyên bố bảo mật" là một mã thông báo đáng tin cậy mô tả một thuộc tính của ứng dụng, người dùng ứng dụng hoặc một số bên tham gia khác trong giao dịch. Các câu khẳng định 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: Tạo câu khẳng định bảo mật thay cho người tham gia
- Nhà cung cấp dịch vụ: Xác thực các câu khẳng định bảo mật thông qua mối quan hệ đáng tin cậy với 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ụ. Nó hoạt động như một trình cung cấp danh tính bằng cách tạo các câu khẳng định và đính kèm chúng vào thông báo yêu cầu, giúp các dịch vụ phụ trợ xử lý những câu khẳng định đó. Nó đóng vai trò là nhà cung cấp dịch vụ bằng cách xác thực các câu khẳng định trên thông báo yêu cầu đến.
Loại chính sách SAML hỗ trợ các câu khẳng định SAML khớp với phiên bản 2.0 của Quy cách SAML Core và phiên bản 1.0 của Quy cách WS-Security SAML Token Profile.
Tạo câu lệnh SAML
Xử lý chính sách:
- Nếu thông báo không phải là XML và IgnoreContentType không được đặt thành
true, thì hãy đưa ra lỗi. - Nếu bạn đặt "Template" (Mẫu), hãy xử lý mẫu như mô tả cho chính sách AssignMessage. Nếu thiếu biến và IgnoreUnresolvedVariables chưa được đặt, hãy tăng lỗi.
- Nếu "Template" (Mẫu) chưa được đặt, hãy tạo một câu khẳng định bao gồm các giá trị của tham số Subject (Đối tượng) và Issuer (Đơn vị phát hành) hoặc các giá trị tham chiếu của chúng.
- Ký câu khẳng định bằng khoá đã chỉ định.
- Thêm câu khẳng định vào thông báo tại XPath đã chỉ định.
Xác thực câu lệnh SAML
Xử lý chính sách:
- Chính sách này kiểm tra thông báo đến để xác minh rằng loại 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 các định dạng
text/(.*+)?xmlhoặcapplication/(.*+)?xmlhay không. Nếu loại nội dung nghe nhìn không phải là XML và bạn không đặt<IgnoreContentType>, thì chính sách sẽ gây ra lỗi. - Chính sách này sẽ phân tích cú pháp XML. Nếu phân tích cú pháp không thành công, thì thao tác này sẽ gây ra lỗi.
- Chính sách này sẽ trích xuất phần tử đã ký và câu khẳng định bằng cách sử dụng XPath tương ứng được chỉ định (
<SignedElementXPath>và<AssertionXPath>). Nếu một trong các đường dẫn này không trả về phần tử, thì chính sách sẽ gây ra lỗi. - Chính sách này sẽ xác minh rằng Câu nhận định 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, chính sách sẽ báo lỗi.
- Nếu một trong hai phần tử
<NotBefore>hoặc<NotOnOrAfter>xuất hiện trong câu khẳng định, thì chính sách sẽ kiểm tra dấu thời gian hiện tại dựa trên các giá trị này, như mô tả trong phần 2.5.1 của SAML Core. - 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 2.5.1.1 của SAML Core.
- Chính sách này xác thực chữ ký số XML bằng giá trị kho lưu trữ uy tín (
<TrustStore>) như mô tả ở trên. Nếu quá trình xác thực không thành công, chính sách sẽ gây ra lỗi.
Sau khi chính sách hoàn tất mà không phát sinh lỗi, nhà phát triển của proxy có thể chắc chắn về những điều sau:
- Chữ ký số trên câu khẳng định là hợp lệ và được một CA đáng tin cậy ký
- Câu khẳng định này có hiệu lực trong khoảng thời gian hiện tại
- Chủ đề và đơn vị phát hành của câu khẳng đị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 những 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 chuyển tên chủ đề đến một hệ thống đích để xác thực.
Bạn có thể sử dụng các chính sách khác, chẳng hạn như ExtractVariables, để phân tích cú pháp XML thô của câu khẳng định nhằm xác thực phức tạp hơn.
Biến dòng
Có nhiều thông tin có thể được chỉ định trong một câu khẳng định SAML. Bản thân câu khẳng định SAML là XML có thể được phân tích cú pháp bằng cách sử dụng chính sách ExtractVariables và các cơ chế khác để triển khai các quy trình xác thực phức tạp hơn.
| Biến | Mô tả |
|---|---|
saml.id |
Mã xác nhận SAML |
saml.issuer |
"Tổ chức phát hành" của câu nhận định, được chuyển đổi từ loại XML gốc sang chuỗi |
saml.subject |
"Chủ đề" của câu khẳng định, được chuyển đổi từ loại XML gốc sang chuỗi |
saml.valid |
Trả về giá trị 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 chủ đề |
saml.scmethod |
Phương thức xác nhận chủ thể |
saml.scdaddress |
Địa chỉ dữ liệu xác nhận chủ đề |
saml.scdinresponse |
Dữ liệu xác nhận chủ đề trong phản hồi |
saml.scdrcpt |
Người nhận dữ liệu xác nhận đối tượng |
saml.authnSnooa |
AuthnStatement SessionNotOnOrAfter |
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ề và 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 rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách và Xử 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 có chứa chính sách này.
| Tên lỗi | Nguyên nhân | Khắc phục |
|---|---|---|
SourceNotConfigured |
Một hoặc nhiều thành phần sau đây trong quy trình Xác thực SAML
chính sách không được xác định hoặc bị trống: <Source>, <XPath>,
<Namespaces>, <Namespace>.
|
build |
TrustStoreNotConfigured |
Nếu phần tử <TrustStore> trống hoặc không được chỉ định trong
Xác thực chính sách SAMLAssertion, thì việc triển khai proxy API sẽ không thành công.
Bạn phải có một Cửa hàng tin cậy hợp lệ.
|
build |
NullKeyStoreAlias |
Nếu phần tử con <Alias> bị trống hoặc không được chỉ định trong <Keystore>
thành phần của Chính sách tạo xác nhận SAML, sau đó là việc triển khai API
proxy. Bạn phải có email đại diện hợp lệ cho Kho khoá.
|
build |
NullKeyStore |
Nếu phần tử con <Name> bị trống hoặc không được chỉ định trong <Keystore>
phần tử của chính sách Tạo SAMLAssertion, sau đó là triển khai API
proxy. Bạn phải nhập tên Kho khoá hợp lệ.
|
build |
NullIssuer |
Nếu phần tử <Issuer> bị trống hoặc không được chỉ định trong mục Tạo SAML
Xác nhận chính sách, thì việc triển khai proxy API sẽ không thành công. Đáp
bạn phải nhập giá trị <Issuer> hợp lệ.
|
build |
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 bài viết 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 nhằm xác thực, tiền tố lỗi là
ValidateSAMLAssertion. |
GenerateSAMLAssertion.failed = true |
Ví dụ về phản hồi khi gặp 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 các biến: Chính sách Trích xuất biến