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

时间:2017-02-14 15:43:26

标签: php authentication single-sign-on jwt

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

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

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

感谢。

2 个答案:

答案 0 :(得分:2)

same-origin policy

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

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

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

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

答案 1 :(得分:0)

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

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

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

相关问题