为什么passport-twitter需要会话支持

问题描述 投票:1回答:3

我正在使用passport在facebook,google,github,twitter身份验证上工作。 facebook,google,github的身份验证正在执行tutorial的编写方式。只有Twitter回复我的消息:

500 Internal Server Error: OAuth authentication requires session support. Did you forget to use express-session middleware?

然后我添加了快速会话中间件(见下文),我的问题已经消失。

import * as expressSession from "express-session";

app.use(expressSession({
    secret: strategyOptions.session.secret,
    resave: false,
    saveUninitialized: true
}));

所以我有3个问题:

  1. 为什么twitter认证需要会话支持?
  2. 我猜测只有我的后端和前端知道会话。 Twitter如何了解我的会话?
  3. 为什么Google,Facebook,Github不需要会话支持?
session authentication twitter passport.js express-session
3个回答
1
投票

1)为什么twitter身份验证需要会话支持?

  • twitter认证需要requestTokenStore在交换之前存储令牌。默认情况下,它是来自SessionRequestTokenStorepassport-oauth1

2)我猜测只有我的后端和前端知道会话。 Twitter如何了解我的会话?

  • twitter身份验证是一种在后端运行的中间件,因此它了解您的会话。

3)为什么Google,Facebook,Github不需要会话支持?

  • Google,Facebook,Github使用passport-oauth2,它不需要requestTokenStore(会话)。

1
投票

1.为什么twitter身份验证需要会话支持?

使用OAuth 1.0a使用Twitter进行身份验证的工作方式如下:

Twitter/OAuth 1.0a authentication process

(来自https://medium.com/@robince885/how-to-do-twitter-authentication-with-react-and-restful-api-e525f30c62bb

您会注意到服务器从Twitter获取请求令牌的步骤,然后将用户发送到Twitter进行授权。当用户重定向回站点时,服务器将交换请求令牌和访问令牌的验证令牌。但是,当用户将用户重定向回网站时,Twitter不会提供请求令牌。因此,服务器需要一种方法来在第一次获取时保存请求令牌,以便在重定向用户时可以检索它。会话用于保存请求令牌。

我猜测只有我的后端和前端知道会话。 Twitter如何了解我的会话?

你是对的,Twitter对你的会话一无所知。会话基本上是存储在用户浏览器中的cookie中的ID,以及与服务器上的该ID相关联的一组数据。因此,用户在发出请求时发送会话ID(与所有请求一起发送cookie),并且该ID用于在服务器上查找数据。

基于(1)的答案,当用户从Twitter重定向回站点时,会话ID用于检索请求令牌。 Twitter不知道(或关心)该请求令牌的存储方式。你可能会以另一种方式存储它,Twitter也不会知道它的区别。

3.为什么Google,Facebook,Github不需要会话支持?

谷歌,Facebook和Github可能使用OAuth 2而不是OAuth 1.0a。 OAuth 2的工作方式不同,因此不需要存储请求令牌。 Twitter实际上是supports OAuth 2。但是,它仅用于应用程序身份验证,而不用于应用程序用户身份验证。因此,您可以使用OAuth 2对您的应用程序进行身份验证,并将API用作您的应用程序。但您无法使用OAuth 2代表用户查询API。换句话说,Twitter不允许您使用OAuth 2来验证您的应用程序是否代表用户使用。


0
投票

@ C0dekid。在我的情况下它是:

export const strategyOptions = {
  ...,
  session: { secret: process.env.SESSION_SECRET || 'SESSION redux-serviceauth-example' },
...};
© www.soinside.com 2019 - 2024. All rights reserved.