2015-01-05 30 views
5

Tôi đã lấy mẫu SAML mùa xuân (xem phần 4.2 in this guide) hoạt động với SSO trang đăng nhập nguồn mở và cố gắng thêm hỗ trợ để sử dụng Máy chủ định danh WSO2 một dịch vụ IDP bổ sung. Để làm điều này, tôi đã thay đổi dự án mẫu SAML mùa xuân bằng cách thêm tệp siêu dữ liệu xml cho IS và thêm mục nhập cho siêu dữ liệu IS vào tệp securityContext.xml.Tích hợp SAML mùa xuân với máy chủ Identity của WSO2, ID thư SAML không được sửa lại

Khi chạy ứng dụng mùa xuân, tôi nhận được tùy chọn đăng nhập bằng IS và tôi có thể đăng nhập thành công vào WSO2 khi tôi được chuyển hướng đến nó. Tuy nhiên, ứng dụng mùa xuân ném một ngoại lệ trên phản hồi SAML IS về nó không khớp với InResponseToField.

2015-01-05 09:54:12,845 line="org.springframework.security.saml.log.SAMLDefaultLogger.log(SAMLDefaultLogger.java:127)" thread="http-nio-8080-exec-4" class="org.springframework.security.saml.log.SAMLDefaultLogger" AuthNResponse;FAILURE;0:0:0:0:0:0:0:1;com:vdenotaris:spring:sp;localhost;;;org.opensaml.common.SAMLException: InResponseToField of the Response doesn't correspond to sent message ae2dab0fb8b0g8e49971b91a73e91i 

Từ gỡ lỗi ứng dụng, thông báo phản hồi không được công nhận là thuộc cùng một phiên như thông báo yêu cầu. Tôi nói rằng từ những 2 thông điệp log, 1st được đăng nhập khi gửi AuthRequest và thứ 2 là khi nhận được phản hồi:

2015-01-05 09:53:20,867 line="org.springframework.security.saml.storage.HttpSessionStorage.storeMessage(HttpSessionStorage.java:93)" thread="http-nio-8080-exec-1" class="org.springframework.security.saml.storage.HttpSessionStorage" Storing message ae2dab0fb8b0g8e49971b91a73e91i to session 26D3B7D9E33F26A7A5092BF6909B9D13 
... 
2015-01-05 09:54:10,731 line="org.springframework.security.saml.storage.HttpSessionStorage.retrieveMessage(HttpSessionStorage.java:117)" thread="http-nio-8080-exec-4" class="org.springframework.security.saml.storage.HttpSessionStorage" Message ae2dab0fb8b0g8e49971b91a73e91i not found in session BBF256F284F55D774E6997600E9B3388 

Các LÀ hồi đáp SAML là:

<?xml version="1.0" encoding="UTF-8"?><saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://localhost:8080/saml/SSO" ID="adlbklpnldoanfphalcaahhacooinnldcejjjioe" InResponseTo="ae2dab0fb8b0g8e49971b91a73e91i" IssueInstant="2015-01-05T09:53:38.063Z" Version="2.0"> 
    <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">localhost</saml2:Issuer> 
    <saml2p:Status> 
     <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/> 
    </saml2p:Status> 
    <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="ebhfkdhlgbhclcklefjigfddoikklhjlanlbolel" IssueInstant="2015-01-05T09:53:38.065Z" Version="2.0"> 
     <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">localhost</saml2:Issuer> 
     <saml2:Subject> 
     <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">smit005</saml2:NameID> 
    <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> 
     <saml2:SubjectConfirmationData InResponseTo="ae2dab0fb8b0g8e49971b91a73e91i" NotOnOrAfter="2015-01-05T09:58:38.063Z" Recipient="http://localhost:8080/saml/SSO"/> 
    </saml2:SubjectConfirmation> 
    </saml2:Subject> 
    <saml2:Conditions NotBefore="2015-01-05T09:53:38.065Z" NotOnOrAfter="2015-01-05T09:58:38.063Z"> 
    <saml2:AudienceRestriction> 
     <saml2:Audience>com:vdenotaris:spring:sp</saml2:Audience> 
    </saml2:AudienceRestriction> 
    </saml2:Conditions> 
    <saml2:AuthnStatement AuthnInstant="2015-01-05T09:53:38.068Z" SessionIndex="406d4530-6fcf-4edf-b876-a68de4b4ea79"> 
    <saml2:AuthnContext> 
      <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml2:AuthnContextClassRef> 
    </saml2:AuthnContext> 
    </saml2:AuthnStatement> 
    <saml2:AttributeStatement/> 
    </saml2:Assertion> 
</saml2p:Response> 

Để tham khảo tôi đính kèm tệp xml siêu dữ liệu mà tôi đã thêm cho WSO2 IS (tôi phải cung cấp cho nó một entityID của 'localhost' vì đây là những gì WSO2 IS khăng khăng khi trả về (nó sử dụng tên máy chủ theo mặc định)).

<?xml version="1.0" encoding="UTF-8"?> 
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" 
        entityID="localhost" 
        validUntil="2023-09-23T06:57:15.396Z"> 
    <md:IDPSSODescriptor WantAuthnRequestsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" > 
    <md:KeyDescriptor use="signing"> 
     <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:X509Data> 
       <ds:X509Certificate>MIICNTCCAZ6gAwIBAgIES343gjANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJVUzELMAkGA1UE 
        CAwCQ0ExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxDTALBgNVBAoMBFdTTzIxEjAQBgNVBAMMCWxv 
        Y2FsaG9zdDAeFw0xMDAyMTkwNzAyMjZaFw0zNTAyMTMwNzAyMjZaMFUxCzAJBgNVBAYTAlVTMQsw 
        CQYDVQQIDAJDQTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzENMAsGA1UECgwEV1NPMjESMBAGA1UE 
        AwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUp/oV1vWc8/TkQSiAvTou 
        sMzOM4asB2iltr2QKozni5aVFu818MpOLZIr8LMnTzWllJvvaA5RAAdpbECb+48FjbBe0hseUdN5 
        HpwvnH/DW8ZccGvk53I6Orq7hLCv1ZHtuOCokghz/ATrhyPq+QktMfXnRS4HrKGJTzxaCcU7OQID 
        AQABoxIwEDAOBgNVHQ8BAf8EBAMCBPAwDQYJKoZIhvcNAQEFBQADgYEAW5wPR7cr1LAdq+IrR44i 
        QlRG5ITCZXY9hI0PygLP2rHANh+PYfTmxbuOnykNGyhM6FjFLbW2uZHQTY1jMrPprjOrmyK5sjJR 
        O4d1DeGHT/YnIjs9JogRKv4XHECwLtIVdAbIdWHEtVZJyMSktcyysFcvuhPQK8Qc/E/Wq8uHSCo=</ds:X509Certificate> 
       </ds:X509Data> 
      </ds:KeyInfo> 
     </md:KeyDescriptor> 
     <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:9443/samlsso" ResponseLocation="https://localhost:9443/samlsso"/> 
     <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://localhost:9443/samlsso"/> 
     <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://localhost:9443/samlsso"/> 
     <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat> 
     <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat> 
     <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat> 
     <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat> 
    </md:IDPSSODescriptor> 
</md:EntityDescriptor> 

Theo yêu cầu, tôi đã lưu nhật ký của thông báo HTTP trình duyệt trên dropbox.

+0

Bạn có thể bao gồm kết xuất thông điệp HTTP đi qua trình duyệt của mình trong quá trình đăng nhập một lần không? –

+0

Xin chào Vladimir, tôi đã thêm một liên kết vào nhật ký của các tin nhắn của trình duyệt. – user1232555

Trả lời

5

Cả SAML Spring và máy chủ WSO2 IDP của bạn được triển khai trên cùng một miền - localhost. Đây là những gì sẽ xảy ra:

  • Xuân SAML tạo ra một phiên HTTP (JSESSIONID-82F3ECD1A1E4F9B7DB0134F3129267A5) và khởi single sign-on
  • WSO2 chấp nhận yêu cầu và xác thực người dùng, nhưng tạo ra phiên riêng của mình (JSESSIONID - C34B21931C53080487B5B9BA6EB490D2) và chuyển hướng người dùng trở lại mùa xuân SAML
  • chứa chạy mùa xuân SAML nhận cookie với JSESSIONID (C34B21931C53080487B5B9BA6EB490D2), nhưng vì nó không nhận ra phiên như vậy nó tạo ra một cái mới (E712A8422009613F6FD3901327690726)
  • 0.123.
  • Xuân SAML cố gắng xác minh thông điệp SAML đã nhận dựa trên các yêu cầu ban đầu, nhưng nó không thể được tìm thấy bởi vì các phiên bản bây giờ là đi

Cách dễ nhất để sửa lỗi này là thay đổi tên cookie phiên cho mùa xuân SAML hoặc WSO2. Bạn cũng có thể triển khai ứng dụng của mình trên các tên miền khác nhau (ví dụ: bằng cách cung cấp cho localhost của bạn một bí danh trong tệp máy chủ - /etc/hosts hoặc %systemroot%\system32\drivers\etc\hosts)

+0

Đây thực sự là vấn đề, cuối cùng tôi thiết lập wso2 để chạy trong máy ảo. Điều này dễ dàng hơn việc sử dụng tên miền khác. – user1232555

+0

@ vladimír-schäfer, làm thế nào để chúng tôi quản lý để thay đổi tên cookie phiên cho Spring SAML? –

+0

Là một phần của Spring Security - xem tại đây http: // stackoverflow.com/questions/29964921/custom-cookie-name-khi-sử dụng-mùa xuân-phiên –

Các vấn đề liên quan