2015-07-07 4 views
3

Я развернул OpenAM и создал размещенный IDP. Затем я хочу настроить NodeJs как поставщика услуг и внедрить SSO с паспортом saml. Для этого я должен зарегистрировать приложение node.js в качестве поставщика удаленных услуг.Настройте nodejs как SP с паспорт-saml и OpenAM как IDP

У меня есть два вопроса:

  1. Чтобы зарегистрировать приложение NodeJs как поставщика удаленного обслуживания, я должен сказать на URL OpenAM, где находятся метаданные. Как я могу получить метаданные с паспорт-saml?

  2. Как настроить паспорт-saml для работы с OpenAM?

ответ

4

Я настроил паспорт-SAML вроде этого:

return new SamlStrategy(
    { 

entryPoint: "http://ndcdr001s:8081/OpenAM-12.0.0/saml2/jsp/idpSSOInit.jsp?" 
     + "metaAlias=/idp" 
     + "&spEntityID=http://ndcui.local:9000/metadata/", 

     callbackUrl: 'http://ndcui.local:9000/login/callback/', 

     logoutUrl: "http://ndcdr001s:8081/OpenAM-12.0.0/saml2/jsp/idpSingleLogoutInit.jsp?" 
     + "binding=urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" 
     + "&RelayState=http://ndcui.local:9000/saml/logout/callback", 

     issuer: 'http://ndcui.local:9000/' 
    }, 
    function (profile, done) { 

     return done(null, 
     { 
      id: profile.id, 
      email: profile.email, 
     // displayName: profile.cn, 
     // firstName: profile.givenName, 
     // lastName: profile.sn, 
      sessionIndex: profile.sessionIndex, 
      saml: { 
      nameID: profile.nameID, 
      nameIDFormat: profile.nameIDFormat, 
      token:profile.getAssertionXml() 
      } 
     }); 
    });  

Тогда я зарегистрирован "http://ndcui.local:9000/metadata/" в качестве ИП в OpenAM.

Я создал метаданные для SP вручную, как это: и поставить под этой ссылке "http://ndcui.local:9000/metadata/"

<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="http://ndcui.local:9000/metadata/"> 
    <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> 

    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://ndcui.local:9000/logout" Response_Location="http://ndcui.local:9000/saml/logout/callback"/> 

    <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://ndcui.local:9000/login/callback" index="0"/> 
    <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post" Location="http://ndcui.local:9000/login/callback" index="1"/> 
    <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="http://ndcui.local:9000/login/callback" index="2"/> 
    <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:artifact-01" Location="http://ndcui.local:9000/login/callback" index="3"/> 
    <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:profiles:holder-of-key:SSO:browser" Location="http://ndcui.local:9000/login/callback" index="4"/> 
    </SPSSODescriptor> 
    <ContactPerson contactType="technical"> 
    <GivenName>Administrator</GivenName> 
    <EmailAddress>[email protected]</EmailAddress> 
    </ContactPerson> 
</EntityDescriptor> 

и мои маршруты:

app.get('/metadata', function (req, res) { 

//Send custom metadata 
     res.type('application/xml'); 
     res.sendfile(__dirname + "/metadata.xml"); 
    } 
); 

app.get("/login", passport.authenticate('saml', 
     { 
     successRedirect: "/", 
     failureRedirect: "/login", 
     }) 
); 

app.post('/login/callback', passport.authenticate('saml', 
     { 
     failureRedirect: '/', 
     failureFlash: true 
     }), 
    function (req, res) { 
     res.redirect('/'); 
    } 
); 

app.get('/logout', auth.requiresLogin, function (req, res) { 

    req.user.nameID = req.user.saml.nameID; 

    req.user.nameIDFormat = req.user.saml.nameIDFormat; 

    samlStrategy.logout(req, function (err, request) { 
     if (!err) { 
     res.redirect(request); 
     } 
    }); 

    }); 

app.get('/saml/logout/callback', auth.requiresLogin, function (req, res) { 
    //Logout user 
    req.logout(); 
    res.redirect('/'); 

    }); 
+0

Вы не должны были пройти сертификат в стратегия? – Rahul

+0

В этом случае я не использовал сертификат. –

+0

ok часть входа работала для меня, но это говорит о том, что 'samlStrategy.logout' не является функцией, можете ли вы подробно рассмотреть это объявление переменной samlStrategy для меня, это объявлено как:' var samlStrategy = require ('passport-saml'). ' – Rahul

0

Если SP не предоставляет метаданные, то вы можете создать метаданные, используя ssoadm create-metadata-templ команду, которая должна создать хороший шаблон метаданных для вас, что вы должны быть в состоянии настроить по мере необходимости.