首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用passport SAML,同时使用node (express)作为后端,vue作为客户端

如何使用passport SAML,同时使用node (express)作为后端,vue作为客户端
EN

Stack Overflow用户
提问于 2018-12-31 22:14:54
回答 1查看 832关注 0票数 1

我有一个应用程序与节点(快速)后端,和vue客户端。我正在尝试使用passport添加SAML SSO。(在服务器节点应用程序上执行此操作是有意义的)。

当在express app中使用时,它工作得很完美。但是当我将它应用于express后端和vue客户端的结构时,它无法重定向到Idp。

当用户进入我的登录页面时,vue客户端(Login.vue)调用node backend来验证用户。(api verifyuser)

节点调用passport.authenticate('saml',...)我期待着一个响应,我可以发送回调用我的vue函数,在那里,在Login.vue中-进行重定向。

但问题来了:在后端节点应用程序中,重定向响应是在我的代码执行后发送的,在passport策略中。因此,它会自动发送到浏览器,而不是返回到调用此节点api的vue脚本。

所以重定向是在后台完成的,用户看不到任何重定向。原始登录页面仍会显示。并且我的vue函数仅在浏览器将重定向(在后台)发送到IDP之后才从API获得响应,并从IDP获得登录html页面响应。因此,我得到的数据是IDP登录页面的html,而不是重定向数据。

我该怎么解决它呢?

我对客户端技术、js和node都是新手,所以我真的不知道应该如何处理这样的流。寻找3天的解决方案。

非常感谢您的帮助!

下面是我的代码片段:

Login.vue:

代码语言:javascript
复制
<input class="button wide cropBottom io-mango ae-5 margin-top-0 toRight" v-on:click="userLogin"  type="button" value="Log In"/>
...
userLogin: function() {
      ...
      ...
        $(".overlay").show();
        this.$http.post(process.env.BASE_URL + "verifyuser", oUser)  //call backend node express app
         .then(function(data) {
               ...
               here I gets only an html login page which the IDP sent as a response to the redirect with the SAML Request.
          }

后端节点快捷app:

verifyuser.js:

代码语言:javascript
复制
module.exports = function (app) {
  app.post('/verifyuser', (req, res, next) => {


      var SamlStrategy = passportSaml.Strategy;

      passport.use(new SamlStrategy(
        {  ...
        });

      passport.authenticate('saml', {session: false}, function (err, user, info) {
            ...
            })(req,res,next);


    //tried to get the redirect here, but res still don't have it. only after this function is called, the SAML request is created from the req, and the location url is made.      

     });
EN

回答 1

Stack Overflow用户

发布于 2019-01-09 22:17:17

我找到了一个解决方案。我更改了Vue客户端:我使用表单的post调用服务器,而不是使用ajax调用服务器,并期望返回数据响应。这样,当我调用浏览器时,浏览器将重定向到服务器,并且当服务器中的passport库返回重定向响应时-它在前台完成,用户可以看到它。

在单次注销中,passport做得更好: passport API只返回创建的注销请求。然后,我可以自己决定是要从服务器重定向,还是要将重定向请求发送到等待的客户端函数-并从那里执行重定向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53988430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档