2014-10-21 3 views
3

Java 웹 애플리케이션이 있습니다. 내 애플리케이션에 SAML 싱글 사인온 (SSO) 로그인을 구현하고 싶습니다. 이 GitHub onelogin program을 요청하여 응답을 받으십시오. 그러나 제대로 작동하지 않았습니다. 거기에 하나의 계정을 만들었습니다. 하지만 엔터프라이즈 계정이 없습니다. 응용 프로그램을 실행하면 onelogin login 페이지로 이동합니다. 로그인을 시도했지만 응답에 anyuthing이 반환되지 않아 권한이 없음을 보여줍니다. 잘못된 자격 증명도 제공하면 SAML 응답을 제공하지 않습니다.SAML 어설 션 생성 및 응답 서명

그래서 어설 션을 만들고 서명하기로 결정했습니다.

  1. 먼저 모든 ID 제공 업체에 SAML 요청을 보내야합니까?
  2. IdP (Like this is fine?) 대신에 샘플 SAML 어설 션을 생성하는 방법
  3. 일단 SAML 응답을 받으면 애플리케이션에 서명하고 어떻게 처리합니까?

감사

UPDATE 1

<?xml version="1.0" encoding="UTF-8"?> 
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
    ID="123" InResponseTo="abc" IssueInstant="2014-11-21T17:13:42.872Z" 
    Version="2.0"> 
    <samlp:Status> 
     <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/> 
    </samlp:Status> 
    <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0"> 
     <saml:Subject> 
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"> 
       [email protected] 
      </saml:NameID> 
     </saml:Subject> 
     <saml:AuthnStatement AuthnInstant="2014-11-21T17:13:42.899Z"> 
      <saml:AuthnContext> 
       <saml:AuthnContextClassRef> 
        urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport 
       </saml:AuthnContextClassRef> 
      </saml:AuthnContext> 
     </saml:AuthnStatement> 
    </saml:Assertion> 
</samlp:Response> 

답변

5

당신이해야 할 첫 번째 일은 SAML 프로토콜을 읽을 것입니다. 나는 내가 추천 할 수있는 두 개의 블로그를 가지고있다.

  • Intro to the Web Profile

  • 다음 앱에 SAML 통합을 구축하도록 선택할 수 있습니다 또는 통합을 제 3 자 응용 프로그램을 사용할 수 있습니다

    Intro to SAML

    • . 일반적인 타사 응용 프로그램은 ShibbolethOpenAM입니다.

      응용 프로그램에 응용 프로그램을 빌드하려면 OpenSAML을 사용할 수 있습니다. OpenSAML은 SAML 메시지 작업에 도움이되는 라이브러리입니다. I have several blogs on the subjectone book that is good to start with

      1. 요청을 보내지 않아도됩니다. IDP는 요청하지 않고 프로세스를 시작할 수 있습니다.
      2. 발견 한 것을 편집하여 만들 수 있습니다. OpenSAML을 사용하여 어설 션을 만들 수도 있습니다.
      3. 응용 프로그램에서 응답을 서명하지 않으면 IDP가 응답을 서명합니다. 그는 서명 검증은 소프트웨어에 달려 있습니다. Here is how you do it in OpenSAML
    +0

    확인을 클릭합니다. 그래서 다른 예제처럼 SAML 어설 션으로 XML 문자열을 하드 코딩 할 수 있습니다. 서명 할 필요가 없다. 그렇다면 어떻게 확인할 수 있습니까? 키 저장소에 인증서를 저장하지 않았습니다. – iUser

    +0

    XML 문자열이 무엇인지 모르겠습니다. 인증서를 사용하여 유효성을 검사합니다. 이 파일 또는 SAML 메타 데이터에서 얻을 수 있습니다 –

    +0

    메타 데이터를 만들 위치는 어디입니까? – iUser

    1

    또한 자신의 유틸리티 클래스 (com.onelogin.saml2.util.Util)를 사용하여 응답에 서명 Java Saml from Onelogin를 사용할 수 있습니다

    // loads xml string into Document 
    Document document = Util.loadXML(saml); 
    
    // loads certificate and private key from string 
    X509Certificate cert = Util.loadCert(pubKeyBytes); 
    PrivateKey privateKey = Util.loadPrivateKey(privKeyBytes); 
    
    // signs the response 
    String signedResponse = Util.addSign(document, privateKey, cert, null); 
    

    당신은 또한으로 Node 소요 다른 .addSign 방법을 사용할 수 있습니다 SAML 응답의 어설 션에 서명하는 첫 번째 매개 변수.

    그들의 메이븐 의존성은 다음과 같습니다

    <dependency> 
        <groupId>com.onelogin</groupId> 
        <artifactId>java-saml</artifactId> 
        <version>2.0.0</version> 
    </dependency>