为什么 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 个问题:
- 为什么 Twitter 身份验证需要会话支持?
- 我猜只有我的后端和前端知道会话。 Twitter 如何知道我的会话?
- 为什么 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 进行身份验证的方式如下:
您会注意到有一个步骤,服务器从 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 来验证您的应用程序以代表用户使用。
我在 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 个问题:
- 为什么 Twitter 身份验证需要会话支持?
- 我猜只有我的后端和前端知道会话。 Twitter 如何知道我的会话?
- 为什么 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 进行身份验证的方式如下:
您会注意到有一个步骤,服务器从 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 来验证您的应用程序以代表用户使用。