2014-11-13 6 views
24

저는 지금까지 SAML을 듣지 않았고 SSO 전략을 개발 한 적은별로 없다고 말하면서 서두르고 싶습니다. 1 년 동안 노드를 간신히 해왔다는 사실과 결합 된 것은 영광스러운 초보자 샌드위치를 ​​만듭니다. 현재 SAML 및 ADFS를 SSO 공급자로 사용하는 클라이언트가 있습니다. 저는 이미 로컬 로그인에 passport.js를 사용하고 있습니다. 따라서 passport-saml을 사용하면 SAML/ADFS를 사용하여 SSO를 구현하는 방법이 될 것 같습니다. 내 연구를하면서 몇 가지 다른 구현 가이드를 찾았습니다.하지만이 프로세스에 대해 전혀 알지 못하기 때문에 몇 가지 지침을 사용할 수 있습니다.SAML/ADFS node.js 구현 가이드?

{ 
    entryPoint: 'https://ad.example.net/adfs/ls/', 
    issuer: 'https://your-app.example.net/login/callback', 
    callbackUrl: 'https://your-app.example.net/login/callback', 
    cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==', 
    identifierFormat: null 
} 

내 주요 질문이 인증서는 어디에서 오는가한다고 가정 해 봅시다 : 여권 - SAML 문서에서

, 나는 (워드 프로세서에 따라) ADFS와 함께 작동하도록 검증 된 전략에 대해 다음을 발견? SSL을 통해 내 서버에서 생성하는 인증서입니까? 공급자가 제공합니까?

내 검색에서 나는 또한 이것을 찾았습니다 : https://github.com/auth0/passport-wsfed-saml2, 이는 passport-saml을 기반으로합니다. 다음 구성이 ADFS에 권장됩니다.

{ 
    path: '/login/callback', 
    realm: 'urn:node:app', 
    homeRealm: '', // optionally specify an identity provider 
    identityProviderUrl: 'https://auth10-dev.accesscontrol.windows.net/v2/wsfederation', 
    cert: 'MIIDFjCCAf6gAwIBAgIQDRRprj9lv5 ... =' 
} 

이 예에서 경로 개체는 분명하며 내 공급자는 이미 내게 providerURL을 제공했습니다. 그러나 영역은 나에게 의미가 없으며, 다시 그 비밀 인증서가 있습니다.

누군가가 node.js 사이트에서 SAML/ADFS SSO를 구현하는 "설명처럼 i'm-five"방법을 제공 할 수 있습니까? 또는 제가 설명한 두 가지 해결책에 의해 요청 된 인수 객체의 머리 나 꼬리를 만들 수있게 도와주십시오. 미리 감사드립니다!

+0

이 작업을 진행 했습니까? – RYFN

+0

ADFS는 그 자체로 복잡한 짐승의 일종입니다. 그래서 ... 시작하려면 ...이 응용 프로그램의 목적은 무엇입니까? ADFS를 SSO 공급자로 사용하려고합니까? (SAML -> Security Assertion Markup Language https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language) –

답변

41

나는 최근에 같은 사고 과정을 통해 갔다 : SAML들어 본 적이 데, 내가 (대신의 Active Directory) ID 공급자로 OneLogin와 SAML을 통해 인증하는 웹 응용 프로그램을 활성화 할 필요가 있었다.

구현하는 동안 OneLogin의 설명서와 passport-saml 라이브러리를 많이 사용했습니다. 둘 다 내가 추천 한 바 있지만 어느 것과도 관련이 없습니다.

(1) SAML 어떻게 작동하는지,

(2) 어떻게 passport-saml 라이브러리 노드에서 작동하고,

(: 나는 깨닫게되었다 무엇

는 혼란이 3 배이었다이었다 3) ID 공급자를 구성하는 방법 (OneLogin, Active Directory 또는 기타) 다음은 "설명처럼 - 나는 5 가지"설명을 시도한 것입니다.

SAML

SAML (Security Assertion Markup Language)은 사용자가 브라우저 세션을 기반으로 로그인 할 수있는 XML 표준입니다. 기본적으로 인증 프로세스가 단순 해집니다. 사용자는 사용자 이름과 비밀번호로 양식을 제출하지 않고 버튼을 클릭 할 수 있습니다.

SAML 작동 방식은 좀 더 복잡합니다.

  1. 사용자가 SAML을 사용하여 특정 응용 프로그램 (라고도 서비스 제공 업체)에 대한 인증하기 버튼을 클릭 :

    SAML SSO flow, OneLogin.com

    다이어그램은 다음 프로세스를 나타냅니다 : 나는 this overview from OneLogin 도움 첨부 된 그림을 발견했다. SAML 승인 요청을 작성하라는 요청이 (노드 또는 기타로) 작성됩니다.

  2. 인증 요청이 구성됩니다. 이 승인 요청은 인코딩 된 및/또는 암호화 된 XML (see more on OneLogin)이며 쿼리 매개 변수로 URL에 추가됩니다. 노드가 브라우저를이 URL로 리디렉션합니다 (https://domain.onelogin.com/trust/saml2/http-post/sso/123456?SAMLRequest=...encodedXML.. 등).
  3. 신원 제공 업체 인 OneLogin은 브라우저 세션에서 사용자가 이미 로그인했는지 여부를 결정합니다. 그렇지 않은 경우 사용자에게 OneLogin의 로그인 양식이 표시됩니다. 그렇다면 브라우저는 응용 프로그램 (서비스 공급자)에게 SAML 응답을 POST합니다. 이 SAML 응답 (다시 XML)에는 NameID와 같은 사용자에 대한 특정 속성이 포함됩니다.
  4. 노드로 돌아가서 응용 프로그램은 SAML 응답을 확인하고 인증을 완료합니다.

노드 및 passport-saml

Passport.js 노드에 대한 인증 미들웨어이다. 전략은 passport-local이거나 우리의 경우 passport-saml 일 수 있습니다.

passport-local 전략은 사용자 이름/암호를 사용하여 Passport 인증을 사용할 수 있으므로 브라우저 세션 및 구성 가능한 ID 공급자 값을 사용하여 Passport 인증을 사용할 수 있습니다 (passport-saml).

passport-saml이 내 목적을 잘 수행했지만 그 문서는 완전히 검토하기가 어려웠습니다. 구성 예는 OpenIdp ID 공급자가 비활성 상태이고 구성 가능 매개 변수가 인 로 인해 작동하지 않습니다.

내가 관심을 갖는 주요 내용은 entryPointpath (또는 callbackURL)입니다. 다음 두 가지 작업 만 수행하면됩니다.

  • entryPoint은 승인 요청 (위 # 2 참조)으로 리디렉션되는 URL입니다.
  • path/callbackURL POST 할 SAML 응답 노드에서 URL/경로를 설정합니다 (위의 # 3 참조).

중요하고 가치있는 다른 많은 매개 변수가 있지만이 두 가지만을 사용하여 SAML SSO를 구성 할 수 있습니다.

ID 공급자 SAML 승인 요청 주어, 그것은 어디 SAML 응답을 전송하는 방법을 알고 있도록

마지막으로, Identity 공급자 자체를 구성해야합니다 구성.OneLogin의 경우 이는 ACS (Consumer) URLACS (Consumer) URL Validator을 설정하는 것으로, 이는 모두 path/callbackURL과 일치해야합니다.

로그 아웃 및 기타 기능을 지원하기 위해 다른 사항을 구성 할 수 있지만 인증에 필요한 최소한의 사항입니다.


요약

원래의 질문에 두 부분이 있었다 : (1) 방법 SAML/ADFS 통합 및 (2) 높은 수준의 SAML이 구현 가이드를 Node.js를 구현하는가. 이 답변은 두 번째 문제를 해결합니다.

구체적으로 Active Directory와 통합하는 경우 ADFS ID 공급자를 사용하도록 passport-SAML을 구성하고 노드에 응답하도록 ADFS 서버를 구성하는 두 가지 부분을 기억하면서 passport-saml's docs on ADFS을 권장합니다.

+0

감사합니다. 수 많은 튜토리얼을 읽고 반은 SAML을 구현 한 후이 답변을 발견했습니다. 그것은 제가 올바른 길을 가고 있다는 암시를줍니다. – IlyaEremin

0

내가 잘못 생각할 수도 있지만 ADFS 서버 XML에서 찾을 수 있습니다. https://servername/FederationMetadata/2007-06/FederationMetadata.xml에 있습니다.

X509Certificate을 꺼냅니다. 나는 계속해서 똑같은 문제를 겪고 있으며 나는 그 다음에 그것을 시도 할 것이다.

관련 문제