2017-02-14 127 views
6

我试图在PHP中为两个主题连接的域创建一个简单的SSO系统。用于跨域身份验证的JWT令牌

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

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

谢谢。

回答

2

跨源数据存储访问不被same-origin policy

访问存储在浏览器如localStorage的和索引资料数据允许通过原点分开。 每个来源都有自己的独立存储空间,并且一个来源的JavaScript无法读取或写入属于其他来源的存储。

通常的解决方案是为具有用于认证的中心结构域(可能是A或B),并用重定向发送JWT或S 域之间工作野兔横跨使用iframe域认证令牌。查看详情here

的OpenID,OAuth的和SAML协议可与重定向,例如谷歌网页套房拥有自己的应用程序连接槽内部框架(谷歌另外一个是OpenID的连接提供商)

+0

的iFrame的伟大工程!谢谢! – Ales

0

没有理由不能做到这一点。智威汤逊并没有什么特别之处,它仅仅是一个令牌,就像会话ID令牌一样。 JWT和任何其他令牌的区别在于它可以包含数据的有效载荷。

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

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