Programing

SAML 서비스 제공 업체가되는 방법

lottogame 2020. 10. 13. 07:17
반응형

SAML 서비스 제공 업체가되는 방법


우리 회사는 현재 Java 웹 애플리케이션을 개발하고 있습니다. 일부 고객은 내부 SAML 서버 (ID 제공자?)를 가지고 있으며 이들과 통합하도록 요청했습니다. 그래서 최근에 나는 그것에 대해 읽고 OpenAM을 가지고 놀았습니다. 약 3 일이 지나면 전반적으로 이해가되지만 여전히 내 지식에 약간의 차이가 있습니다. 내 희망은 누군가 나를 위해 이것을 해결할 수 있다는 것입니다.

여기에 사용자가 로그인하는 워크 플로를 상상하는 방법이 있습니다.

고객 SAML 서버를 https://their.samlserver.com 으로 정의하겠습니다 . 따라서 사용자는 보호되는 리소스를 위해 웹 애플리케이션을 찾습니다. URL이 http://my.app.com/something 이라고 가정 해 보겠습니다 .

따라서 내가 맞다면 my.app.com 은 SAML이 서비스 제공 업체 로 정의한 것 입니다. 애플리케이션은이 사용자가 로그인해야한다는 것을 인식합니다. 그런 다음 이와 같은 페이지를 사용자에게 표시합니다.

<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
    <input type="hidden" name="SAMLRequest" value="someBase64Data" />
    <input type="submit" value="Submit" />
</form>

그리고 그것은 이것의 인코딩 된 버전 someBase64Data이어야합니다 base64...

<samlp:AuthnRequest
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="identifier_1"
  Version="2.0"
  IssueInstant="2004-12-05T09:21:59Z"
  AssertionConsumerServiceIndex="0">
 <saml:Issuer>http://my.app.com</saml:Issuer>
 <samlp:NameIDPolicy
   AllowCreate="true"
   Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>

그래서 내 첫 몇 가지 질문.

ID은 무엇입니까 ?

그리고 왜 본인을 발행자 로 선언 할 수 있습니까?

아이덴티티 공급자가 나에 대해 알고 있습니까? 아마도 이것이 제가 OpenAM 에서 보았던 신뢰의 원일 것 입니다. 그리고 그것이 나에 대해 안다면, 어떻게 나에 대해 알고 무엇을 알아야합니까?

따라서 사용자가 해당 페이지를 전달하면 IDP https://their.samlserver.com에서 제공하는 페이지로 이동 합니다. 그들은 해당 페이지에서 인증하고 IDP는 인증을 확인하고 사용자를 찾는 것이 마법처럼 작동합니다. 인증이 성공하면 IDP는 여기<samlp:Response>정의 된을 다시 보냅니다 .

몇 가지 질문이 더 있습니다.

먼저 <samlp:Response>웹 애플리케이션으로 돌아가서 확인할 수 있습니까?

그리고 그것이 성공했는지 확인하기 위해 그 응답에서 무엇을 찾아야합니까? 실패는 어떻게 생겼습니까?

현재 이메일 주소 (LDAP)를 사용하여 사용자를 식별하므로 응답에서이를 가져와 지금과 같은 방식으로 사용할 것입니다. 그 응답에서 내가 염두에 두어야 할 다른 것이 있습니까?

이제 응답의 유효성을 확인 했으므로 현재와 같이 사용자에게 세션을 부여 할 수 있습니다. 하지만 로그 아웃을 원할 때이를위한 워크 플로가 있습니까? 사용자가 탈퇴했음을 IDP에 알려야합니까?

그리고 마지막으로, 제 독서에서 다루었던 몇 가지 주제가 있는데,이 작업 흐름에 얼마나 적합한 지 잘 모르겠습니다. 그들은 신뢰의 원 , 토큰아티팩트 입니다.

모두에게 도움을 주셔서 감사합니다. 나는 지난 며칠 동안 많은 정보를 발견했고, 조금 더 플레이 한 후에 그것들을 모을 수있을 것입니다. 그러나 아직 간단한 "게시물이 있습니다"워크 플로 문서를 아직 찾지 못했습니다. 이것이 어떻게 작동하는지 내가 잘못했기 때문일 수 있습니다. 그다지 인기가 없기 때문일 수도 있습니다. 하지만 저는 사용자 인증만큼 중요한 일에서 중요한 단계를 놓치지 않도록 워크 플로가 있는지 확인하고 싶었습니다.


특정 질문에 대한 답변 :

1.) "ID"값은 무엇입니까?

  • SAML 요청에 대한 고유 식별자 여야합니다. SAML 2.0 사양은 이것이 어떻게 수행되는지 실제로 구현에 따라 다르지만 다음 권장 사항을 제시합니다.

SAML 시스템 엔티티가 식별자가 고유한지 확인하는 메커니즘은 구현에 맡겨집니다. 무작위 또는 의사 랜덤 기술이 사용되는 경우, 무작위로 선택된 두 식별자가 동일 할 확률은 반드시 2 ^ -128보다 작거나 같아야하며 길이는 2 ^ -160보다 작거나 같아야합니다 (SHOULD). 이 요구 사항은 128 비트에서 160 비트 길이 사이에서 임의로 선택된 값을 인코딩하여 충족 될 수 있습니다.

2.) IdP는 귀하에 대해 어떻게 알고 있습니까?

  • SP를 IdP에 등록해야합니다. 이를 위해 SAML 사양은 "SAML 메타 데이터"형식을 정의하여 SAML 수신자가 어디에 있는지, 인증서가 무엇인지, 교환하는 속성 등을 IdP에 알려줍니다. OpenAM은 신뢰할 수있는 SP를 구성하기위한 몇 가지 최소 요구 사항을 지정할 수 있습니다. 이것은 제품마다 다릅니다.

3.) 응답은 어디에 있으며 무엇을 확인해야합니까?

  • 응답은 일반적으로 초기 설정을 위해 SP에서 IdP와 교환하는 SAML 메타 데이터에 정의 된 Assertion Consumer Service (ACS) URL로 이동합니다. SAML 응답을 받으면 많은 사항을 확인해야하지만 가장 중요한 것은 SAML 상태 코드가 "성공"이어야하고 inResponseTo ID가 요청에서 보낸 ID와 일치해야하며 어설 션에서 디지털 서명의 유효성을 검사해야한다는 것입니다. 이를 위해서는 IdP의 공개 확인 인증서를 신뢰해야하며 해지 확인도 수행 할 수 있습니다.

4.) 로그 아웃은 어떻습니까?

  • SAML 2.0은 또한 SLO (Single LogOut)에 대한 프로필을 정의합니다. 이렇게하면 SP에서 로그 아웃 될뿐만 아니라 IdP 및 세션을 설정 한 다른 SP도 로그 아웃됩니다. SSO (Single Sign-On)와 유사한 요청 / 응답 흐름이 있으므로 설정 및 확인해야 할 사항 (상태 코드, 서명 등)이 비슷합니다.

간단히 말해서 이것은 처음부터 구현하기가 매우 복잡 할 수 있습니다. Ian이 제안한 것처럼 검증 된 실제 라이브러리 및 / 또는 제품을 사용하는 것이 가장 좋습니다. 그의 같은 회사는 사양에 따라 구현하고 다른 공급 업체와의 상호 운용성을 테스트하는 데 수백 시간의 개발자 시간을 투자했습니다.


If you're just trying to set a single Java application up as a Service Provider, you should consider using a Fedlet from either Oracle (as a standalone ) or ForgeRock ( bundled with OpenAM ). The ForgeRock Fedlet has some issues interacting with Shibboleth 2.2.1 as an Identity Provider, but I find it to be somewhat simpler to configure and more informative.

Each has explicit instructions contained in the README to help you deploy. Once the Fedlet is configured and communicating with the IDP, the success page shows you all the code you need to integrate federated SSO into your application. It does the background work of sending and receiving AuthnRequests and Responses.

Scott's answer responds quite well to the questions you had, but I think that trying to write code on your own that generates the SAML is reinventing the wheel. The Fedlet was designed with precisely this use case in mind.

참고URL : https://stackoverflow.com/questions/5502231/how-to-become-a-saml-service-provider

반응형