无法使用ExpressJS与oauth2orize提供程序保持持久登录

Joh*_*der 3 node.js oauth-2.0 express passport.js

我正在创建一个应用程序,该应用程序将使用OAuth2协议提供身份验证,以使用应用程序的策略为已知客户端提供服务.

我已经尝试过使用oauth2orizenode-oauth2-provider模块,并且我不断得到同样的观点:

  1. 通过客户端,api密钥api机密登录用户,用户可以通过我的提供商应用程序成功登录.
  2. 在客户端应用程序和用户成功进行身份验证之后,会将令牌发送回客户端应用程序(用户登录到客户端 - yay!),但用户会立即注销该Provider应用程序.我无法弄清楚在哪里,为什么会发生这种情况 - 这是OAuth2协议的一个特性吗?

这是正常的吗?如果我使用Facebook作为策略(想想passport-facebook),那么如果我使用Facebook登录任何应用程序,当我被重定向回应用程序时,我仍然登录到Facebook - 是我希望为访问我的应用程序的客户提供的行为.

两个提供者模块都非常擅长我正在寻找的90%,但是他们的示例中都没有提供"持久性"登录,oauth2orizenode-oauth2-provider.我错过了什么吗?

Joh*_*der 5

嗯,我想我明白了.

localhost使用不同的端口运行客户端和服务器- 并且cookie /会话相互覆盖.

因此,如果客户端快速应用程序正在运行http://localhost:3000并且运行oauth提供程序http://localhost:3001,则登录到oauth提供程序并在客户端上创建会话将覆盖提供程序上的会话.

解决方案(暂时):

# /etc/hosts
127.0.0.1 dev.client.com
127.0.0.1 dev.oauth-provider.com
Run Code Online (Sandbox Code Playgroud)

登录http://dev.client.com:3000将我带到http://dev.oauth-provider.com:3001,当用户成功登录并在客户端上创建会话时,提供者仍然登录.