SAML Request 검증

SAML Request는 Deflate + Base64로 인코딩되어 있다. 단, IMAP/CalDAV API로 SAML Request가 전달될 경우에는 Base64 인코딩만 되어 있다.
각 경우에 알맞게 검증해야 한다.

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

<?xml version="1.0" encoding="UTF-8"?><saml2p:AuthnRequest    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"     AssertionConsumerServiceURL="{ACS URL}"     ID="{NAVER WORKS 인증 시스템에서 발행하는 ID}"     IssueInstant="{Request 생성 일시}"     ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"     ProviderName="worksmobile.com"     Version="2.0">    <saml2:Issuer        xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">worksmobile.com</saml2:Issuer>    <saml2p:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/></saml2p:AuthnRequest>

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

항목설명
AuthnRequest AssertionConsumerServiceURL줄여서 ACS URL이라 하며, SAML Response를 전달하는 URL이다.
예) "https://auth.worksmobile.com/acs/{도메인명} "
필요 시 NAVER WORKS의 URL인지 확인한다.
AuthnRequest IDNAVER WORKS 인증 시스템에서 발행하는 ID로, SAML Response 생성 시 사용한다.
AuthnRequest IssueInstantSAML Request 생성 일시
AuthnRequest ProtocolBinding'HTTP-POST'로 보내므로 SAML Response는 반드시 POST 방식으로 전송해야 한다.
AuthnRequest ProviderNameNAVER WORKS 서비스 제공자 이름으로, 'worksmobile.com'으로 보내고 있다.
필요 시 NAVER WORKS의 도메인인지 확인한다.
IssuerSAML Request 생성자 이름으로, 'worksmobile.com'으로 보내고 있다.

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

<?xml version="1.0" encoding="UTF-8"?><saml2p:AuthnRequest    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"     AssertionConsumerServiceURL="https://auth.worksmobile.com/acs/company.com"     ID="bemkplgpdoemkhjmncgmbcdibglpngclfombpmed"     IssueInstant="2018-02-14T03:33:49.999Z"     ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"     ProviderName="worksmobile.com"     Version="2.0">    <saml2:Issuer        xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">worksmobile.com</saml2:Issuer>    <saml2p:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/></saml2p:AuthnRequest>