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

Why passport-twitter requires session support

我在 facebook 上工作,google、github、passport. Authentication with facebook, google, github are executing how in tutorial 写了 twitter 身份验证。只有 Twitter 回复我消息:

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

然后我添加了 express-session 中间件(见下文),我的问题就解决了。

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 不需要会话支持?

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

  • twitter 身份验证需要 requestTokenStore 来存储交换前的令牌。默认情况下,它是 passport-oauth1 中的 SessionRequestTokenStore

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

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

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

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

@C0dekid。在我的例子中是:

export const strategyOptions = {
  ...,
  session: { secret: process.env.SESSION_SECRET || 'SESSION redux-serviceauth-example' },
...};

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

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

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

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

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

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

基于 (1) 的回答,会话 ID 用于在用户从 Twitter 重定向回站点时检索请求令牌。 Twitter 不知道(或不关心)该请求令牌是如何存储的。您可能会以其他方式存储它,而 Twitter 不会知道其中的区别。

3。为什么 Google、Facebook、Github 不需要会话支持?

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