2014-10-14 3 views
0

다른 엔터프라이즈 응용 프로그램 (학부모)의 일부인 Google의 응용 프로그램입니다. 우리의 응용 프로그램은 상위 웹 응용 프로그램에서 하위 응용 프로그램으로 호출됩니다. 사용자는 부모 앱에서 인증을받습니다 (SSO). 사용자가 링크를 클릭하면 애플리케이션이 팝업됩니다. 요구 사항은 SAML 어설 션을 처리하고 어설 션의 일부로 오는 특성을 사용한다는 것입니다. 내 질문은 봄 샘풀의 전체 계층 구조가 필요하거나 WebSSOprofileConsumerImpl에 해당하는 "webSSOprofileConsumer"가 충분하면스프링 SAML - 어설 션 처리

우리는 SSO/입증. SAML 통합에서이를 수행 할 수 있습니까? 그렇다면 어떻게?

덕분에, M

+0

질문에 대한 자세한 내용을 추가하십시오. – Ram

+0

다시 시도해 봅시다. 다른 엔터프라이즈 애플리케이션 (학부모)의 일부인 Google 애플리케이션. 우리의 응용 프로그램은 상위 웹 응용 프로그램에서 하위 응용 프로그램으로 호출됩니다. 사용자는 부모 앱에서 인증을받습니다 (SSO). 사용자가 링크를 클릭하면 애플리케이션이 팝업됩니다. 요구 사항은 SAML 어설 션을 처리하고 어설 션의 일부로 오는 특성을 사용한다는 것입니다. 내 질문은 내가 Spring saml beans의 완전한 hierarachy를 가질 필요가 있는지, 아니면 WebSSoprofileConsumerImpl에 해당하는 "webSSOprofileConsumer"만 있으면 충분하다. – MRAM

+0

질문에 추가하십시오.이 주제의 도메인 전문가가 아닙니다. 귀하의 질문을 검토하고 질문을 개선하여 더 많은 의견과 빠른 답변을 얻을 수 있도록 추가했습니다. – Ram

답변

1

아니, 당신은이에 대한 완전한 봄 SAML 콩 필요하지 않습니다. OpenSAML로만 할 수 있습니다 - 어설 션을 파싱하고 속성을 추출하는 것으로 충분합니다 (당신이 필요로하는 유일한 것으로 보이는 것). getPool에

protected T unmarshallMessage(Reader messageStream) throws MessageDecodingException { 
    log.debug("Parsing message stream into DOM document"); 

    try { 
     Document messageDoc = getPool().parse(messageStream); 
     Element messageElem = messageDoc.getDocumentElement(); 

     if (log.isTraceEnabled()) { 
      log.trace("Unmarshalled message into DOM:\n{}", XMLHelper.nodeToString(messageElem)); 
     } 

     log.debug("Unmarshalling message DOM"); 
     Unmarshaller unmarshaller = Configuration.getUnmarshallerFactory().getUnmarshaller(messageElem); 
     if (unmarshaller == null) { 
      throw new MessageDecodingException(
        "Unable to unmarshall message, no unmarshaller registered for message element " 
        + XMLHelper.getNodeQName(messageElem)); 
     } 

     T message = (T) unmarshaller.unmarshall(messageElem); 

     log.debug("Message successfully unmarshalled"); 
     return message; 
    } catch (XMLParserException e) { 
     log.error("Encountered error parsing message into its DOM representation", e); 
     throw new MessageDecodingException("Encountered error parsing message into its DOM representation", e); 
    } catch (UnmarshallingException e) { 
     log.error("Encountered error unmarshalling message from its DOM representation", e); 
     throw new MessageDecodingException("Encountered error unmarshalling message from its DOM representation", e); 
    } 
} 

통화가 org.opensaml.xml.parse.ParserPool의 인스턴스를 리턴 할 필요가, 예를 들어 :

다음 코드 SAML 객체에 SAML 메시지 XML 스트림을 변환의 예입니다 BasicParserPool.

반환되는 개체는 예 : org.opensaml.saml2.core.Response 또는 org.opensaml.saml2.core.Assertion 타입이며, SAML 코드베이스에서 이러한 객체로 작업하는 방법에 대한 세부 정보를 찾을 수 있습니다.

속성 처리에 대한 자세한 내용은 SAMLCredential#getAttributeAsStringArray을 참조하십시오.

응용 프로그램을 초기화하는 동안 org.opensaml.DefaultBootstrap.bootstrap()을 호출하여 OpenSAML을 초기화합니다.

+0

Thanks Vladimir. 우리는 이미 우리의 응용 프로그램에서 봄이 있습니다. 1. 우리가 봄 - 보안 - 샘을 사용하고 싶다면 우리 모두가해야 할 일. 2. 나의 무지를 용서해주십시오. 당신이 언급 한 위의 코드 스 니펫은 어디에 들어 맞을까요? – MRAM

+0

Maven에 Spring SAML 의존성을 포함 시키거나 (수동으로 Dependent Jars를 모두 포함해야 함) Spring SAML 샘플에 포함 된 securityContext.xml의 컨텐츠를 현재 Spring Security 애플리케이션에 포함시켜야한다. 내가 보낸 스 니펫은 들어오는 SAML 어설 션을 구문 분석해야하는 위치에서 사용해야합니다. –

+0

블라디미르에게 감사드립니다. 한 가지 더 묻습니다. 이를 통합하기 전에 모든 어플리케이션 로직을 처리하는 하나의 Spring Controller가 있었으며 우리는 어떤 인증도 가지고 있지 않았습니다. 이제 이것을 처리하기 위해이 컨트롤러가 단정 논리 (본문)를 처리해야하거나 추가 작업 (예 : webSSOprofileConsumer)을 작성해야합니다. webSSOprofileConsumer를 사용하여 컨트롤러가 어설 션에서 필요한 세부 정보를 얻는 방법을 잘 모르겠습니다. 감사합니다 ~ M – MRAM

관련 문제