Token/stateless 在具有微服务架构的 Silex 应用程序中进行身份验证?

Token/stateless auth in Silex application with a Microservice architecture?

我想使用 Silex 作为几个服务的基础框架。它会被不同的客户端和 apis(移动、网络等)使用,所以我通常试图避免使用 headers 的 cookies/session 和 'do it'。

Setup/flow 我想要实现的目标:

  1. 用户登录他的移动 app/on 网页,向 authservice.domain.com 发出请求,取回新令牌作为响应,该令牌也在令牌存储区中注册

  2. 当用户从 Web 或移动应用程序访问时 products.domain.com 从 header 读取令牌并在商店中检查

一切看起来都很漂亮,但不知何故我无法让 Silex 在登录步骤后将 headers 添加到请求中,我可以将其添加到响应中,但不能添加到请求中(我尝试使用 before/after 中间件所以第一授权,然后在 $app->after/before) 添加令牌...顺便说一句。我不确定我是否理解正确,但是如果用户在以这种方式设置 header 时按下刷新页面按钮,自定义 header 不会丢失吗?如果是这种情况,是否有可能在 header 秒内保留令牌而不用 cookies/session 秒?

这是我在 运行 获得令牌后的示例代码,它会根据响应进行设置(我可以在 chrome 中看到它),但它不会根据请求进行设置 - 我也尝试使用 with before middleware

    $this->after(function(Request $request, Response $response) {
        $response->headers->set("X-token","2");
        $request->headers->set("X-token","2");
    });

关于如何实现这一点有什么建议吗?所以...无状态身份验证在普通 (Silex : )) php 中使用 headers 多个服务,而不在 cookie 或(api 网关)会话中保留令牌?

我不确定它是否会回答您的问题,但您可以看一下 WSSE 身份验证机制,它是无状态的并且可以与 headers 一起使用,因此它可能就是您正在寻找的。

官方文档中有symfony2的实现示例here, which is also nicely explained here

您也可以找到 github 为 Silex 实现 WSSE 的库,也许您应该试一试:

希望这会帮助您或其他寻求在 Silex 中实现良好 RESTful-ish/stateless 机制的人,如果这不是您想要的,我们深表歉意。