Node.js NodeJS+;Express:Passport vs OAuth2与作用域(访问权限)的关系
假设我在API.example.com实现一个API服务,它需要使用OAuth2以足够的粒度来保护其端点,以适应不同的用户类型Node.js NodeJS+;Express:Passport vs OAuth2与作用域(访问权限)的关系,node.js,express,oauth-2.0,passport.js,oauth2orize,Node.js,Express,Oauth 2.0,Passport.js,Oauth2orize,假设我在API.example.com实现一个API服务,它需要使用OAuth2以足够的粒度来保护其端点,以适应不同的用户类型 通过Facebook身份验证的用户只能访问https://api。example.com/Facebook 通过Twitter身份验证的用户只能访问https://api。example.com/Twitter 通过授权服务进行本地身份验证的用户可以访问facebook和twitter端点 这意味着我们有以下角色: 身份验证提供商(授权服务器、Facebook、T
- 通过Facebook身份验证的用户只能访问https://api。example.com/Facebook
- 通过Twitter身份验证的用户只能访问https://api。example.com/Twitter
- 通过授权服务进行本地身份验证的用户可以访问facebook和twitter端点
- 身份验证提供商(授权服务器、Facebook、Twitter)
- 授权提供程序(我的OAuth2服务器)(auth.example.com)
- 资源提供者(我的API服务器)(API.example.com)
- ExpressJS webapp或SPA(www.example.com)或本机应用程序
- 如果(请求用户){…}李>
- 如果(req.isAuthenticated()){…}李>
- passport.authenticate('持有者',{会话:false)
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, cb) {
User.findOrCreate({ facebookId: profile.id }, function (err, user) {
return cb(err, user);
});
}
));
这包含客户端id和客户端密码。何时使用?每次调用passport.authenticate(“facebook”)时?是否会将整个重定向到facebook登录页面,获得授权码授权并将其交换为accessToken,以某种方式在内部存储accessToken,并将其保留到注销
这似乎不太可能,但我不知道如果没有这些,它如何才能真正对用户进行身份验证。而且对每个API调用进行身份验证的成本太高,因此我确信它的工作效率更高。但我不知道如何进行身份验证,并且研究源代码并没有让它更清楚
Q5api**.example.com如何知道www.example.com在每个api请求中包含的承载accessToken何时未伪造或过期
我假设它必须对照auth.example.com服务进行检查,该服务反过来必须检查facebook/twitter会话是否仍然有效,并在此时使用refreshToken刷新令牌?一种简单但幼稚的方法是使用
窗口。referer
,但这只适用于前端h问题您认为您提供了一个有用的答案吗?以验证当前的使用范围。据我所知,您需要一种方法来确保Facebook授权的提供商仅访问/Facebook等。在进行前端呼叫时,您可以使用referrer查看当前的URL状态或范围(如果实现)。我问我的资源服务器如何知道它可以管理对其端点的访问,我不明白。什么?