SSO

IdP SAML Request 요청 시 페이지를 찾을 수 없음 문제

dfqyzcmgxpuc07fhlxcw

2024.02.16읽음 365

안녕하세요. 위의 문서를 보면서 NAVER WORKS 아이디로 로그인(idP) 을 구현중인 한 개발자입니다.

관련 개발 문서를 보며 따라하고 있는데

SAML Request를 보내면은 계속 페이지를 찾을 수 없음

오류페이지가 표출되며 원인을 알 수가 없어 문의드립니다.

개발자 콘솔에서 SAML Apps을 등록하였고 활성 상태로 변경하였으며

TEST 버튼 클릭 시 SAMLResponse는 잘 받아오는 상태임을 확인했습니다.

등록한 앱의 필수 정보는 다음 예시로 하겠습니다.

Application Name : companyname-test

ACS URL : http://192.168.1.22:8080/auth/idp(개발용으로 사용중인 로컬호스트 웹 URL 입니다.)

SP Issuer (Entity Id) : companyname-issuer

NAVER WORKS Identity Provider 정보에서 확인한

SSO URL은 다음과 같습니다.

https://auth.worksmobile.com/saml2/idp/[companyName].com
이제 SAML Request 명세를 참고하여 파라미터를 만들기 위해 
문서를 참고하여 다음과 같이 코드 상에 문자 타입으로 입력하였습니다.
 
<?xml version="1.0" encoding="UTF-8"?>
<saml2p:AuthnRequest
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
AssertionConsumerServiceURL="http://192.168.1.22:8080/auth/idp"
ID="fiokocckbjonklcjiepfejmoehpebebmholeoibp"
IssueInstant="2024-02-16T04:43:45Z"
ProtocolBinding=""
ProviderName="companyName.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>

저는 HTTP GET METHOD를 사용할 것이기에
AuthnRequest ProtocolBinding 는 넣지 않았습니다.
이 XML을 파이썬 상에서
문자열 변환 > Deflate 압축 > Base64 인코딩 처리하였습니다.
 
# Python Deflate + BASE64 Encoding
# SAML Request XML 템플릿
saml_request_template = f"""
<?xml version="1.0" encoding="UTF-8"?>
<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
AssertionConsumerServiceURL="{acs_url}"
ID="{random_id}"
IssueInstant="{issue_instant}"
ProtocolBinding=""
ProviderName="{provider_name}"
Version="2.0"
>
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">{sp_issuer}</saml2:Issuer>
<saml2p:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"/>
</saml2p:AuthnRequest>
"""
   
# Deflate 압축 후 Base64 인코딩
# [2:-4] 헤드,테일 체크섬 슬라이싱 제거
compressed_request = zlib.compress(saml_request_template.encode('utf-8'))[2:-4]
encoded_data = base64.b64encode(compressed_request)
base64_encoded_request = encoded_data.decode('utf-8')

# SAMLRequest를 GET 파라미터로 추가하여 IdP URL 구성
sso_url = "https://auth.worksmobile.com/saml2/idp/[companyName].com"
idp_url = f"{sso_url}?SAMLRequest={base64_encoded_request}"

HTTP GET METHOD로 요청시 보내는

SAMLRequest 파라미터의 최종 문자값은 다음과 같습니다.

 fZFdb8IgFIb/CuG+LSXGdMTWuBkTE7cYP3axOwJUycrHgFb998NaF3exXQGHl/Oc92UyPasGdMJ5aXQJ8xRBIDQzXOpDCfe7RVLAaTXxVDXYklkbjnojvlrhA4gPtSe3mxK2ThNDvfREUyU8CYxsZ68rglNErDPBMNNAMPNeuBBRL0b7Vgm3Fa6TTOw3qxIeQ7Aky/InnObjIs1TjEmBCpTRiM0ktxAs5yWUuu5OUp0uxgorjqxT/JMepKFdXLg5cRpqptg5qr1vxVL7QHUoIUZ4lCCc5OMdGpHRmKDiA4L1MNuz1DfPfamTXLi3aKSEzChL9eV6SOMegvd7WNEaHKIhPco9ZvJ/JPQeBKwGwFWTyL7NJHts+pP+dYTlfG0ayS5gYZyi4W9InuZ9RfKk7qWk1d4KJmspOMyqgfH7T6tv
SSO URL을 통해 요청을 보내는 주소는 다음과 같습니다.
 https://auth.worksmobile.com/saml2/idp/[companyName].com?SAMLRequest=fZFdb8IgFIb/CuG+LSXGdMTWuBkTE7cYP3axOwJUycrHgFb998NaF3exXQGHl/Oc92UyPasGdMJ5aXQJ8xRBIDQzXOpDCfe7RVLAaTXxVDXYklkbjnojvlrhA4gPtSe3mxK2ThNDvfREUyU8CYxsZ68rglNErDPBMNNAMPNeuBBRL0b7Vgm3Fa6TTOw3qxIeQ7Aky/InnObjIs1TjEmBCpTRiM0ktxAs5yWUuu5OUp0uxgorjqxT/JMepKFdXLg5cRpqptg5qr1vxVL7QHUoIUZ4lCCc5OMdGpHRmKDiA4L1MNuz1DfPfamTXLi3aKSEzChL9eV6SOMegvd7WNEaHKIhPco9ZvJ/JPQeBKwGwFWTyL7NJHts+pP+dYTlfG0ayS5gYZyi4W9InuZ9RfKk7qWk1d4KJmspOMyqgfH7T6tv
SAML 디코딩을 해주는 사이트에서도 저의 SAMLRequest 파라미터 문자를 디코딩해도 잘 되는데
왜 페이지를 찾을 수 없음이 발생하는지 원인을 도저히 알 수가 없습니다만 무언가 빠지거나 놓친 것이 있을까요?
본래 정상적인 상황이라면 어떤 화면이나 인터페이스가 표출되나요?


댓글4

  • 업데이트 된 답글입니다.

    ptmt

    AuthnRequest ProtocolBinding는 필수로 입력해야 하는 값인데 빠진 것 같습니다.
    https://developers.worksmobile.com/kr/docs/sso-idp-request#idp-request-body

    2024.02.16

    0
  • 업데이트 된 답글입니다.

    dfqyzcmgxpuc07fhlxcw 작성자

    ProtocolBinding="" 으로 추가하여 진행해도
    마찬가지로 같은 오류가 발생하고 있습니다.
    해당 사항 수정해서 본문에 반영하겠습니다.

    2024.02.16

    0
  • 업데이트 된 답글입니다.

    ssl1

    content-type도 확인 해보아야 할것 같습니다
    SAML Request 할 때 이미 url encoding 한 상태면 content-type : x-www-form-url-encoded 으로 했을 때 브라우저에서 url encoding이 되어 총 2번 인코딩이 된 상태로 전달된다고 하는 내용이 있더라구요

    2024.02.16

    0
  • 업데이트 된 답글입니다.

    dfqyzcmgxpuc07fhlxcw 작성자

    해당 사항도 확인해보았지만 똑같이 되지 않았습니다.

    브라우저 개발자 도구로 request header를 확인해봐도
    content-type : x-www-form-url-encoded 관련된 설정은 없었습니다.

    포스트맨이나 파이썬 상에서 request로 똑같이 요청해봐도
    똑같이 페이지를 찾을 수 없다는 에러가 나오네요.

    2024.02.16

    0
이전 글구성원 목록 조회시 employeeNumber 가 null 입니다.
다음 글Bot callback 메시지 수신 인증서
목록

궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!