繁体   English   中英

用于跨域身份验证的JWT令牌

[英]JWT token for cross domain authentication

我正在尝试在PHP中为两个主题连接的域创建一个简单的SSO系统。

所以我想知道是否可以将包含域A的用户用户名的签名JWT令牌存储到本地存储。 然后使用来自域B的相同密钥来验证JWT,这将导致成功的认证。

我搜索谷歌的一些答案,我发现其中一些包含一个中间身份验证域,它将负责身份验证。 但我想仅仅链接我拥有的两个域名。

谢谢。

同源策略不允许从域B到域A的跨源数据存储访问

对存储在浏览器中的数据(如localStorage和IndexedDB)的访问由origin分隔。 每个源都有自己独立的存储 ,一个源中的JavaScript无法读取或写入属于另一个源的存储。

通常的解决方案是拥有一个用于身份验证的中心域(可以是A或B),并使用iframe在发送JWT的域之间进行重定向 ,或者跨域使用身份验证令牌 详情请见此处

OpenId,OAuth和SAML协议适用于重定向,例如Google网络套件的应用程序通过iframe连接(此外,Google是一个openid-connect提供商)

没有理由你不能这样做。 JWT并不是什么特别的东西,它只是一个象会话ID令牌的令牌。 JWT和任何其他令牌之间的区别在于它可以包含数据的有效负载。

您所描述的内容基本上是OAuth 2.0的密码授权。 您的SSO系统是授权服务器,可以对用户进行身份验证并为其提供访问令牌。 在这种情况下,访问令牌实际上也可以是JWT。 然后,用户(资源管理员)可以使用他们的访问令牌来访问资源服务器(您的其他相关域),这些资源服务器可以验证访问令牌是否有效以及允许或拒绝请求。

在PHP中实现OAuth 2.0时,我使用以下库: https//oauth2.thephpleague.com/ - 文档中也有一些很好的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM