如何在Slim 3 Response Header中附加JWT令牌

时间:2018-10-23 13:20:29

标签: php authentication jwt single-sign-on slim-3

我目前正在从事SSO项目。与Google一样,我们将account.domain.com作为SSO服务器。并且我们在三个不同的服务器(application1.com,application2.com 、, application3.com)上托管了三个应用程序。

每当用户要从这三个应用程序登录时,该用户将被重定向到SSO服务器。如果用户提供的登录凭据正确,则SSO服务器将生成JWT访问令牌。现在,Generated令牌必须附加到用户请求的应用程序响应标头,然后将用户与“授权:承载$ token”一起重定向到请求的应用程序。

我目前在将生成的令牌附加到响应标头时遇到问题。我目前正在将Slim 3框架与lcobucci / jwt一起用于JWT令牌。

我的代码:

$username = "Test";
$newResponse = $response->withHeader('Authorization' , "Bearer $token");
return $newResponse->withRedirect("http://application1.com/$username", 301); 

当我在accounts.domain.com中调试响应头时,似乎已设置了授权头。但是另一方面(application1.com)没有收到授权标头。

屏幕截图

Initial Request from application1.com SSO Domain Redirect to grab the Cookie Validate the Session by the Grabbed Cookie and attach the Auth Header attached Authentication Success but no Authorization Headers Received

我的疑问是问题是否是由于.htaccess文件中的服务器配置(apache2)引起的(或者我的实现本身是错误的)。

指导我解决此错误。

环境详细信息:

  • 服务器:Apache 2
  • 框架:Slim 3
  • JWT:lcobucci / jwt包

1 个答案:

答案 0 :(得分:0)

HTTP协议中的重定向不支持将任何标头添加到目标位置。基本上,它本身只是一个标头,只允许使用URL。

它看起来像这样:

HTTP/1.1 307 Temporary Redirect
Location: http://application1.com

添加授权标头时,您只会将该标头发送回客户端:

HTTP/1.1 307 Temporary Redirect
Location: http://application1.com
Authorization: ...

在发送响应重定向并设置诸如Authorization之类的标头时,浏览器将不会将此标头转发到现在重定向到的站点。如果您绝对希望将某些参数传递给浏览器将重定向到的站点,则必须将该参数作为URL查询参数传递。