【问题标题】:SubDomain Authentication Mechanism & Session Maintainance子域认证机制和会话维护
【发布时间】:2018-01-03 07:23:59
【问题描述】:

场景

有3个域(其中2个是子域)


站点 1

  • 独立网站

站点 2

  • 所有操作完全依赖 api

API

  • 仅依赖于 site1 进行身份验证

问题

Site1只有一个登录页面

用户登录到站点 1 并且必须能够以登录用户的身份访问站点 2 其中站点 2 使用 REST api 服务器进行所有操作,包括身份验证(必须由站点 1 提供)。

最好的方法是什么?


【问题讨论】:

    标签: session authentication jwt access-token session-state


    【解决方案1】:

    会话与令牌替代方案:

    • 会话 cookie:站点 1 对用户进行身份验证并创建一个使用唯一 sessionId cookie 标识的服务器会话。它被丢弃是因为 cookie 不能轻易跨域共享,并且它也意味着共享服务器会话

    • 身份验证令牌:站点 1 在用户身份验证成功后生成一个随机令牌,并重定向到站点 2。站点 2 存储该令牌并使用它来调用 API。如果您正在构建 SPA(单页应用程序),则令牌可以存储在客户端,如果您的应用程序是基于表单的,则可以为每个用户使用会话来构建服务器端。

    关于token策略,可以使用:

    • 不透明令牌:分配给用户并存储在站点 1 中的随机字符串。站点 2 和 API 在收到令牌时都应查询站点 1 以验证其是否处于活动状态并对应谁

    • Json Web 令牌 (JWT):令牌是自包含的,包括用户身份和一些其他利益声明,例如我们的到期时间或受众。令牌使用站点 1 的密钥签名,因此可以防止更改。站点 2 和 API 可以在不在线查询站点 1 的情况下验证 JWT,并且不需要服务器存储。在这种情况下,需要一个非对称密钥对私有-公共 (RSA)。令牌使用私钥签名并通过公共验证

    总结:JWT 简化了您的开发,减少了服务器到服务器的链接,并且需要更少的资源

    【讨论】:

    • 如果 jwt 是从 site1 切片会更好吗 ----- Site1 - 放置唯一的 UserId (使用 api 的公钥加密)在 thatsme.org 下的 cookie 中...... Site2 - 如果不存在会话,则可以访问该 cookie 并传输到 api 服务器............ ... api - 使用其私钥解密用户 ID 并创建存储在 site2 会话中的 jwt ...... Site2 - 稍后对 api 服务器的所有 api 调用使用 jwt
    • 在此解决方案中,加密不会增加安全性。任何窃取加密或未加密 ID 的人都可以随时冒充用户。而且您必须更改整个系统的密钥。方便site1生成JWT
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 2012-02-22
    • 2015-11-22
    • 1970-01-01
    • 2011-02-09
    • 2013-10-18
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多