PHP,JWT passthrough路径和方法

时间:2017-09-29 06:22:23

标签: php jwt slim

我正在通过超薄框架和它的slim-jwt-auth中间件构建应用程序。

我安装了它,它工作正常,但我对直通可能性感到有些困惑。

我的RequestPathRule:

new \Slim\Middleware\JwtAuthentication\RequestPathRule([
            "path" => ["/api"],
            "passthrough" => ["/api/auth", "/api/users", "/api/products", "/api/orders", "/api/streets",
                              "/api/reservations", "/api/feedbacks", "api/menu"]
        ])

我的RequestMethodRule:

new \Slim\Middleware\JwtAuthentication\RequestMethodRule([
            "passthrough" => ["POST", "GET"]
        ])

但是它允许这些方法适用于所有端点。实际上,我想仅对/api/auth/api/orders/api/reservations/api/feedbacks以及除/api/users以外的每个端点的GET进行POST。

这怎么可能?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

看看你的路线是哪个很有意思,但基本上你当前的配置是:

1)DON' T认证" / api / auth"," / api / users"," / api / products",&#34 ; / api / orders"," / api / streets"," / api / reservations"," / api / feedbacks"和" api / menu" (/ api下的其余端点必须通过身份验证)

2)并且也不要验证任何POST或GET请求

一些例子:

  • PUT /api/users自从/ api / users进入后,永远不会进行身份验证 RequestPathRule
  • GET /api/users自从/ api / users进入后,永远不会进行身份验证 RequestPathRule AND GET在RequestMehtodRule
  • PUT /api/whatever自/ api / users以来,总是会进行身份验证 不在RequestPathRule中AND GET不在RequestMethodRule

基本上规则像OR比较运算符一样工作,并且在适当的时候端点在RequestPathRule中,或者请求方法在RequestMethodRule中,请求将不被验证。

更好的方法可能是尝试尽可能不使用RequestMethodRule(通常只包括OPTIONS方法)并使用不同的路径。

在普通的网络应用程序中,您将在/api下为您的客户提供公共API路径,并且您通常不会通过身份验证的唯一端点是/api/login(或/api/auth in您的示例)/api下的其余端点已经过身份验证。如果您提供另一组您不想要进行身份验证的端点,则提供另一个不同的路径,例如/service,并且不要将其包含为"路径"在RequestPathRule中。如果您需要一组端点ALL经过身份验证,则在新路径下创建所有端点,让我们说/admin并在RequestPathRule中包含路径,并且不要添加任何"直通"对他们来说。

所以这个想法是使用不同的路径,只需在RequestMethodRule下为特定用例添加这些方法。此外,通过这种方式,您将获得更清晰,更有条理的API。

查看您的终点我建议您为大多数终端创建不同的路径,因此不要使用" / api / auth"," / api / users"," / api / products"," / api / orders"我建议你有" / auth"," / user"," / product"," / order" ...和你一起可以为每条路径添加RequestPathRuleRequestMethodRule

老实说,正如认为slim-jwt-auth中间件一样,在同一端点上提供CRUD操作很困难,让我们说你有{{GET,POST,PUT和DELETE} {{ 1}}并且您只想验证POST,PUT和DELETE。对于这种情况,您可以有两个选项:

  1. 为每个动词创建不同的端点,例如:/userGET /user/allPOST /user/addPUT /user/edit(这是一种不好的做法
  2. 创建或扩展您的DELETE /user/deleteRequestPathRule可调用的唯一条件,他们必须实施RequestMethodRule并根据您的需求进行调整(强烈推荐)
  3. 如果选择第二个选项,则只需将那些可调用项添加到RuleInterface选项中。像这样:

    rules