ember-simple-auth-oauth2 会话数据示例

Example of ember-simple-auth-oauth2 session data

在我的 Rails 应用程序中,我试图设置一个 cookie,以便在页面加载后由 Ember Simple Auth 的 cookie 存储获取。我正在使用 Ember Simple Auth OAuth2 授权方。

现在,我只是直接将 OAuth 数据作为 cookie 值:

{
  "token_type": "bearer",
  "access_token": "3ec78864cc017982fdeeb0c092bfbea3f104df1e18c9c67f222581d9353f3fce",
  "refresh_token": "cb03c07b8845ea7b40251b0df46839177bd7b51b3dd1d23f167890b9e1549f07",
  "created_at": 1436454055,
  "expires_in": 7060,
  "expires_at": 1436461254
}

我猜这不是 Ember Simple Auth 所期望的,因为 syncData 函数读取它一次,然后在下一次 cookie 轮询后用这个值替换它:

{ secure: {} }

OAuth 2 的数据应该是什么样的?我猜无论存储方式如何(cookie 与本地存储与临时存储)都是一样的。

在查看 this screenshot from this post 之后,我想我可能离题太远了,我一直无法理解在 Ember 简单授权源中四处寻找以解决这个问题。

Ember Simple Auth 仅使用 cookie 来存储其内部状态。 cookie 不能从服务器设置,也不应该在服务器端使用。该库仅用于为无状态(= 无 cookie)API 实施令牌身份验证。

有关 OAuth 2.0 如何与 ESA 协同工作的更多信息,请参阅自述文件:https://github.com/simplabs/ember-simple-auth/tree/master/packages/ember-simple-auth-oauth2#ember-simple-auth-oauth-20

我认为,如果可能的话,应该遵循 Marco 在已接受答案中的建议。

但是,再仔细研究一下,我发现 cookie 内容需要看起来像这样才能让 Ember Simple Auth OAuth 2 识别它:

{
  "secure": {
    "authenticator": "simple-auth-authenticator:oauth2-password-grant",
    "token_type": "bearer",
    "access_token": "3ec78864cc017982fdeeb0c092bfbea3f104df1e18c9c67f222581d9353f3fce",
    "refresh_token": "cb03c07b8845ea7b40251b0df46839177bd7b51b3dd1d23f167890b9e1549f07",
    "created_at": 1436454055,
    "expires_in": 7060,
    "expires_at": 1436461254
  }
}

当然,这种方法有一些缺点,即如果升级 Ember Simple Auth 更改了存储此数据的格式,它可能会中断。

如果您像我尝试做的那样从另一个应用程序设置 cookie,则需要注意在每次更新 Ember Simple Auth 后检查此格式。实现此目的的最佳方法是创建一个空白的 Ember 应用程序,并安装并配置了 Simple Auth,然后在您登录该应用程序后查看它存储的数据格式。