2016-08-11 2 views

답변

1

첫째, 당신은 여권 SAML에 대한 설정에 logoutUrllogoutCallback를 정의 할 필요가있다. logoutUrl은 서버가 logoutRequest를 보낼 URL입니다. 그래서 당신이 사용하고있는 아이디 공급자로부터받은 URL입니다. logoutCallback은 이름에서 알 수 있듯이 로그 아웃이 완료된 후 브라우저에서 (리디렉션을 통해) 호출 할 callbackUrl입니다. 여기에 당신이 그 구성을 추가하는 방법은 다음과 같습니다

module.exports = { 
    development: { 
    app: { 
     name: 'Passport SAML strategy example', 
     port: process.env.PORT || 8443 
    }, 
    passport: { 
     strategy: 'saml', 
     saml: { 
     logoutUrl: 'idp-logout-url-here', 
     logoutCallback: 'your-logout-callback-url-here' 
     } 
    } 
    } 
}; 

그런 다음 당신은 당신이 위에서 정의 된 설정을 사용합니다 코드, 어딘가에 SamlStrategy이 필요합니다. 물론 config에는 다른 변수도 있습니다. 이제 로그 아웃 관련 변수를 여기에 입력합니다. 이 로그 아웃을 호출합니다, 당신은 위에서 볼 수 있듯이

app.get('/logout', function(req, res) { 
    if (req.user == null) { 
     return res.redirect('/'); 
    } 
    return SamlStrategy.logout(req, function(err, uri) { 
     return res.redirect(uri); 
    }); 
    }); 

:

은 마지막으로 전화했을 때 로그 아웃 프로세스를 시작합니다 노드 응용 프로그램에 정의 된 자신의 로그 아웃 경로을 가질 필요가 함수를 정의합니다. 그래서 패스포트 - 샘 전략에 정의 된 로그 아웃 기능이있다. 위와 마찬가지로 콜백 함수를 제공해야합니다. 콜백 함수는 URI에 대한 응답을 리디렉션합니다. 그 uri은 이전에 정의한 logoutCallback URL입니다.

SamlStrategy가 궁금하다면 실제로 여권 -Saml의 전략입니다. 어떻게 작동시키는 지 보여줄 수 있습니다. 별도의 파일에서, 예를 들어 'SAML-strategy.js'라는이를 넣어 :

const SamlStrategy = require('passport-saml').Strategy; 
var config = require('./config.js')['development']; 

module.exports = new SamlStrategy(
    { 
    otherImportantvariable1: config.passport.saml.OtherImportantvariable1, 
    logoutUrl: config.passport.saml.logoutUrl, 
    logoutCallback: config.passport.saml.logoutCallback 
    } 
    function (profile, done) { 
    user = Object.assign({}, profile); 
    return done(null, user); 
    } 
); 

삽입 모든 중요한 설정 변수 같은 방법으로 로그 아웃 관련 변수는 상기 정의 된 바와 같다. 첫 번째 단계에서 생성 된 구성을 포함시킵니다.

그런 다음 당신은 당신이 당신의 경로가 동일한 파일에 SamlStrategy을 필요로 할 수 있습니다

const SamlStrategy = require('../config/saml-strategy'); 

문의하십시오 아무것도 불분명 한 경우! 다음 ADFS위한

0

아웃 픽스

1) 세션 인덱스 속성 여권 SAML 로그 아웃 요청의 일부로서 추가되어야한다. 당신은 여권 프로파일 객체로부터 그것을 얻을 수 있습니다.

function (profile, done) { 
     console.log('Profile: %j', profile); 
     return done(null, 
     { 
      id: profile.nameID, 
      sessionIndex: profile.sessionIndex 
     }); 

ADFS에서 반환 된 sessionIndex가없는 경우. 그런 다음 신뢰할 수있는 부분 트러스트의 NameID 규칙은 다음과 같아야합니다.

"Claim rule name"으로 NameID를 추가하고 Attribute store로 "Active Directory"를 선택하고 LDAP 특성으로 "SAM-Account-Name"을 선택하고 "Name ID "을"보내는 클레임 ​​유형 "으로 지정하고 마법사를 끝내고 클레임 규칙 창을 확인합니다.(참조 : spring saml ADFS)

2) 디버그는 ADFS 로그 (이벤트 뷰어)를 사용하여 오류가 아래와 같은 있는지 여부를 확인

는 SAML 단일 로그 아웃 요청이 로그인 된 일치하지 않습니다 세션 참가자는 입니다. 요청자 : app.yyy.com
요청 이름 식별자 : 형식 : 항아리 : 오아시스 : 이름 : TC : SAML : 1.1 : nameid 포맷 : 지정, NameQualifier : SPNameQualifier : SPProvidedId : 세션 참가자 로그인 한 : 카운트 : 1, [Issuer : app.yyy.com, NameID : (형식 : NameQualifier : SPNameQualifier : SPProvidedId :)]

이 요청은 실패했습니다.

그렇다면 세션을 로그 아웃하기 위해 nameIDFormat을 비워 두어야 함을 의미합니다. 이전에는 인증 요청에 지정된 nameIDFormat을 사용하고 있었지만 작동하지 않았습니다.

HTTP-POST 바인딩은이 구성 없이는 아무런 차이가 없습니다.

희망이 도움이됩니다.

관련 문제