当前位置: 首页 > 面试题库 >

Passport.js:password-facebook-token策略,通过JS SDK登录,然后对护照进行身份验证?

阚允晨
2023-03-14
问题内容

我一直在寻找一种让我的客户使用facebook JS SDK授权的方法,然后以某种方式将此授权转移到我的节点服务器(以便它可以使用fb graph
api验证请求

我偶然发现了:https :
//github.com/jaredhanson/passport-
facebook/issues/26

https://github.com/drudge/passport-facebook-
token

这似乎与护照-脸书完全不同

我假设是正确的:

一个人使用fb JS SDK登录,然后facebook-token令牌策略以某种方式从文档或主体对象中提取了令牌和fb id?

还是有其他合适的方法来实现这一目标?我就是想避免服务器SDK强制执行的重定向


问题答案:

我本周花了几天时间,试图找出使用私有密码的Facebook身份验证的最佳方法,即使用passport.js-护照-facebook-令牌非常适合此操作。

您以为这是两种单独的身份验证策略是正确的。您不需要安装password-facebook即可使用passport-facebook-token。

如果您在客户端JS(或iOS等)中实现了Facebook身份验证,并且正在寻找一种使用用户的Facebook
authToken对API请求进行身份验证的方法,那么passport-facebook-token是一个非常好的解决方案。

Passport-facebook-token的工作原理完全独立于password-
facebook,并且在将请求传递给您的控制器之前,基本上处理了Facebook内部所需的重定向。

因此,要使用passport-facebook-token对API路由进行身份验证,您需要按照以下方式设置护照策略:

passport.use('facebook-token', new FacebookTokenStrategy({
    clientID        : "123-your-app-id",
    clientSecret    : "ssshhhhhhhhh"
  },
  function(accessToken, refreshToken, profile, done) {
    // console.log(profile);

    var user = {
        'email': profile.emails[0].value,
        'name' : profile.name.givenName + ' ' + profile.name.familyName,
        'id'   : profile.id,
        'token': accessToken
    }

    // You can perform any necessary actions with your user at this point,
    // e.g. internal verification against a users table,
    // creating new user entries, etc.

    return done(null, user); // the user object we just made gets passed to the route's controller as `req.user`
  }
));

值得注意的是,User.findOrCreatepassword-facebook-token-token自述文件中使用的方法不是默认的mongo /
mongoose方法,而是一个您必须安装的插件。

要将此身份验证策略用作任何路由的中间件,您需要将其access_token作为URL参数或请求主体的属性传递给它。

app.get('/my/api/:access_token/endpoint', 
        passport.authenticate(['facebook-token','other-strategies']), 
        function (req, res) {

            if (req.user){
                //you're authenticated! return sensitive secret information here.
                res.send(200, {'secrets':['array','of','top','secret','information']});
            } else {
                // not authenticated. go away.
                res.send(401)
            }

        }

注意 该access_token属性区分大小写并使用下划线。护照-facebook-
令牌的文档并不广泛,但是源代码确实经过了很好的注释并且非常易于阅读,因此,我建议您在此处进行深入了解。当然,这可以帮助我为护照的一些更一般的使用方法所用。



 类似资料:
  • 我们目前正在从遗留安全子系统迁移到Elytron,并在JBoss EAP 7.3.6中部署了一个基于Struts2的web应用程序,该应用程序应该支持多种“风格”的身份验证。 登录的标准方式应该是,用户以登录表单()手动提供凭据,然后单击相应的按钮。这在我们的设置中与Elytron配合得很好。 第二种可能性是,对Web应用程序受保护内容的GET请求可能包含包含JWT令牌的自定义cookie。这个c

  • 我的构建成功完成,但应用程序崩溃。有人会像我的代码中那样,在Android Studio中使用Viewpager和片段编写一个关于如何将Firebase Auth与Facebook登录链接的教程吗?我的应用程序中需要一个滑块。 没有碎片的应用程序工作得非常完美。有人知道为什么吗? 这是例外: 2019-01-19 11:13:05.129 8439-8439/jimmy.jimmyfindgymb

  • 目前用户名总是匿名的。设置调用方主体的正确方法是什么?我在拦截器里做这个吗?还是在豆子本身?我的目标是基本上能够调用一个方法loginUserWithEJBOnJboss(String user,String pass),该方法使用在jboss中配置的登录方法并正确设置主体。 我在这里不知所措,谷歌什么也没找到。也许我只是在寻找错误的单词。

  • 嗨,我正在进行Spring Boot,我正在尝试使用Spring Security性来从active Directory进行用户身份验证。但是我无法将用户登录到应用程序中,我已经尝试了几个东西,下面是我尝试的代码: 当我试图从administrator登录时,我得到的错误如下: 原因:LDAP处理过程中出现未分类异常;嵌套异常是javax.naming.namingException:[LDAP:

  • 问题: 我们有一个spring的基于MVC的RESTful API,它包含敏感信息。API应该是安全的,但是不希望在每个请求中发送用户的凭据(User/Pass组合)。根据REST指南(和内部业务需求),服务器必须保持无状态。API将由另一台服务器以混搭方式使用。 要求: > 客户端请求使用凭据(不受保护的URL);服务器返回一个安全令牌,该令牌包含足够的信息,供服务器验证未来的请求并保持无状态。

  • 我有一个react应用程序在一个单独的端口(localhost:3000)上运行,我想用它来验证用户,目前我的Spring后端(localhost:8080)有一个代理设置。 我能以某种方式手动验证而不是通过发送一个请求到我的后端,并获得一个会话cookie,然后在每个请求中包含cookie吗?这也将简化iOS方面的验证过程(使用此过程,我只能将会话cookie值存储在keychain中,并在每次