SAML Request 생성 및 전달

SSO URL의 파라미터로 SAML Request를 생성하여 전달한다.

Request URL {#idp-request-url}

Developer Console의 SAML Apps 등록 시 발급되는 SSO URL을 이용한다.

예) https://NAVERWORKS인증시스템URL/saml2/idp/mycompany.com

  • NAVER WORKS의 인프라 보안 정책에 따라 HTTPS(443) 통신을 권장한다.
  • NAVER WORKS로부터 발급받은 SSO URL로 SAML Request와 Relay State를 전달한다.

HTTP Method {#idp-request-method}

GET 또는 POST

참고

  • GET과 POST로 전송할 때 각각 SAML Request 인코딩 방식이 다르다. 아래 Request 항목을 참고한다.

Request {#idp-request}

파라미터타입필수 여부설명
SAMLRequestStringYSAML 2.0 Request 명세에 따른 문자열
- GET으로 전달한 경우: Deflate + Base64로 인코딩
- POST로 전달한 경우: Base64로 인코딩
RelayStateStringN인증 실패 시 재시도하는 URL

SAML Request 명세 {#idp-request-body}

<?xml version="1.0" encoding="UTF-8"?><saml2p:AuthnRequest    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"    AssertionConsumerServiceURL="{NAVER WORKS에 등록한 ACS URL}"    ID="{ID}"    IssueInstant="{SAML Request 생성 일시}"    ProtocolBinding="{Protocol Binding}"    ProviderName="{Service Provider Name}"    Version="2.0">    <saml2:Issuer        xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">{NAVER WORKS에 등록한 SP Issuer}</saml2:Issuer>    <saml2p:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/></saml2p:AuthnRequest>

SAML Request의 각 항목은 다음과 같다.

항목타입필수 여부설명
AuthnRequest AssertionConsumerServiceURLStringY줄여서 ACS URL이라 하며, SAML Response를 받을 URL이다.
Developer Console에 등록한 ACS URL과 동일해야 한다.
AuthnRequest IDStringY고객사에서 발행하는 ID로, SAML Response 생성 시 사용한다.
AuthnRquest IssueInstantDate(UTC)YSAML Request 생성 일시
AuthnRequest ProtocolBindingStringYSAML Response를 받을 형태를 명시한다. 아래의 "Protocol Binding"을 참고한다.
AutnnRequest ProviderNameStringN고객사명
IssuerStringYDeveloper Console에 등록한 SP Issuer(Entity Id)를 사용한다.
NameIDPolicy FormatStringYNAVER WORKS에서는 "UNSPECIFIED"를 고정값으로 사용한다.

Protocol Binding {#idp-request-protocol-binding}

항목설명
urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POSTSAML Response를 Base64 인코딩하여 POST로 전달받는다.
그 외SAML Response를 Deflate + Base64 인코딩하여 GET으로 전달받는다.

SAML Request Example {#idp-request-body-example}

<?xml version="1.0" encoding="UTF-8"?><saml2p:AuthnRequest    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"    AssertionConsumerServiceURL="https://example.com/acs/vendor.com"    ID="fiokocckbjonklcjiepfejmoehpebebmholeoibp"    IssueInstant="2018-02-25T07:42:35Z"    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"    ProviderName="example.com"    Version="2.0">    <saml2:Issuer        xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">SPIssuer</saml2:Issuer>    <saml2p:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/></saml2p:AuthnRequest>