Session 子域认证机制&;会话维护

Session 子域认证机制&;会话维护,session,authentication,jwt,access-token,session-state,Session,Authentication,Jwt,Access Token,Session State,场景 共有3个域(其中2个为子域) -主网站(.NET) -子域网站(节点) -REST Api服务器(节点) 地点1 独立站点 站点2 所有操作完全依赖api 原料药 仅依赖site1进行身份验证 问题 Site1只有一个登录页 用户登录到Site1,并且必须能够以登录用户的身份登录到site2,其中site2使用REST api服务器执行其所有操作,包括身份验证(必须由Site1提供) 这方面的最佳方法是什么 会话与令牌替代方案: 会话cookie:站点1对用户进行身份

场景

共有3个域(其中2个为子域)

  • -主网站(.NET)
  • -子域网站(节点)
  • -REST Api服务器(节点)

地点1

  • 独立站点
站点2

  • 所有操作完全依赖api
原料药

  • 仅依赖site1进行身份验证

问题

Site1只有一个登录页

用户登录到Site1,并且必须能够以登录用户的身份登录到site2,其中site2使用REST api服务器执行其所有操作,包括身份验证(必须由Site1提供)

这方面的最佳方法是什么


会话与令牌替代方案:

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

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

关于令牌策略,您可以使用:

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

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


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

如果JWT从site1中分割出来会更好吗------site1-将唯一的用户ID(用api公钥加密)放在thatsme.org下的cookie中。。。。。。。。。。。。。Site2-有权访问该cookie并在不存在会话的情况下传输到api服务器。。。。。。。。。。。api-使用其私钥解密用户ID,并创建存储在site2会话中的jwt。。。。。。。。。。。Site2-later将jwt用于对api服务器的所有api调用在此解决方案中,加密不会增加安全性。任何窃取加密或未加密ID的人都可以随时冒充用户。你必须改变整个系统的键。site1可以方便地生成JWT