symfony 4 在 api 密钥验证器中获取 header
symfony4 get header in api key authentificator
我想将在登录控制器中获得的 API 令牌 作为 HTTP header 传递给允许 ApiKeyAuthentificator 使用 $apiKey = $request->headers->get('apikey');
.
读取它
我曾经使用查询参数让它工作,但这似乎不安全。
- 在登录控制器中
我在返回响应之前设置了一个 apikey http header:
$response = $this->redirectToRoute('home');
$response->headers->set('apikey', $data->token);
return $response;
- 在家庭控制器中
成功重定向到主页后,如果我 var_dump headers,header 未设置 和 request->headers->get('apikey')
returns null.
但是,在重定向之后,如果我打开网络检查器并查找来自登录控制器的 POST 请求,则会设置 header。
但是 home 的 GET 请求中没有设置 header,我想这就是为什么我无法使用 [=13 在家庭控制器中获取它的原因=]
- 在 ApiKeyAuthentificator
同样的问题。无法使用 $apiKey = $request->headers->get('apikey');
访问 HTTP header
如果我设置了一个 cookie,我设法在家庭控制器和验证器中获取它,为什么我不能使用 header?
如何使用 symfony 请求/响应正确设置和访问 HTTP header,并使其可从身份验证器访问?
您在这里误解了 HTTP request/response header 的目的。 Headers 本身并不是像您那样以这种原始形式设计的,以表示任何类型的 session 或持久性。 HTTP 本身是非常无状态的,没有任何请求与出现的任何其他请求相关。
您的应用程序可以并且正在其响应中提供 header,但实际上没有任何理由让 Web 浏览器为此目的在未来的请求中再次包含相同的 header链接请求。只有自定义 HTTP client/implementation,例如定制的本机 mobile/tablet 应用程序,才会故意在 HTTP header 中直接包含 API key/token。 (如果没有一些强大的 Javascript 实现来处理所有导航,没有标准的网络浏览器会这样做。)
Cookie 正是您在这里所需要的。通常你也不需要担心它们,因为 PHP 有 session 个变量,你可以存储任意多的变量,单个 cookie 用于将未来的请求与一组session 个变量。 (Session 标识符 cookie,通常命名为 "PHPSESSID"。)
一旦验证用户是真实的,登录控制器应该在PHP的session变量中存储与用户认证session相关的任何内容。完成后,cookie 将被传递到客户端 Web 浏览器,您无需执行进一步操作。
--
虽然这个解释只是概念性的。 Symfony 是一个非常完整的框架,有 taken care of this concept for you。注释 // or if you want to use an "apikey" header, then do something like this:
主要用于自定义 Web 客户端(应用程序)。如果您的目标是拥有自定义客户端 HTTP/web 客户端,那么您的工作就是记住应用程序内存中其他地方的令牌变量,这不会作为标准在 HTTP 模块中。
我认为我链接的文章中您可能需要的是关于 storing authentication in the session 的部分。然后 HTTP 客户端只需要提供一次 API 密钥。
--
至于安全性,HTTP header 对于任何聪明到知道 HTTP 请求结构的人来说,并不比查询变量更安全。 (这是 HTTP 的基本知识。)这与 post 变量不比查询变量更安全。
- 如果您使用的是标准网络浏览器,唯一的好处是不会在地址栏中看到 API 键,但是无论如何您都应该为这些客户端使用 session cookie比每个后续请求中的 API 键。
- 如果您正在为应用程序创建自定义 Web 客户端,那么自定义 header 对于窥探 HTTP 流量的人来说就像查询变量一样容易可见。
强制 HTTPS 是您可以有效隐藏自定义 HTTP header 或流量嗅探器查询变量的唯一方法,为请求的每个部分和后续响应提供完全相同的保护。
我想将在登录控制器中获得的 API 令牌 作为 HTTP header 传递给允许 ApiKeyAuthentificator 使用 $apiKey = $request->headers->get('apikey');
.
我曾经使用查询参数让它工作,但这似乎不安全。
- 在登录控制器中
我在返回响应之前设置了一个 apikey http header:
$response = $this->redirectToRoute('home');
$response->headers->set('apikey', $data->token);
return $response;
- 在家庭控制器中
成功重定向到主页后,如果我 var_dump headers,header 未设置 和 request->headers->get('apikey')
returns null.
但是,在重定向之后,如果我打开网络检查器并查找来自登录控制器的 POST 请求,则会设置 header。
但是 home 的 GET 请求中没有设置 header,我想这就是为什么我无法使用 [=13 在家庭控制器中获取它的原因=]
- 在 ApiKeyAuthentificator
同样的问题。无法使用 $apiKey = $request->headers->get('apikey');
如果我设置了一个 cookie,我设法在家庭控制器和验证器中获取它,为什么我不能使用 header?
如何使用 symfony 请求/响应正确设置和访问 HTTP header,并使其可从身份验证器访问?
您在这里误解了 HTTP request/response header 的目的。 Headers 本身并不是像您那样以这种原始形式设计的,以表示任何类型的 session 或持久性。 HTTP 本身是非常无状态的,没有任何请求与出现的任何其他请求相关。
您的应用程序可以并且正在其响应中提供 header,但实际上没有任何理由让 Web 浏览器为此目的在未来的请求中再次包含相同的 header链接请求。只有自定义 HTTP client/implementation,例如定制的本机 mobile/tablet 应用程序,才会故意在 HTTP header 中直接包含 API key/token。 (如果没有一些强大的 Javascript 实现来处理所有导航,没有标准的网络浏览器会这样做。)
Cookie 正是您在这里所需要的。通常你也不需要担心它们,因为 PHP 有 session 个变量,你可以存储任意多的变量,单个 cookie 用于将未来的请求与一组session 个变量。 (Session 标识符 cookie,通常命名为 "PHPSESSID"。)
一旦验证用户是真实的,登录控制器应该在PHP的session变量中存储与用户认证session相关的任何内容。完成后,cookie 将被传递到客户端 Web 浏览器,您无需执行进一步操作。
--
虽然这个解释只是概念性的。 Symfony 是一个非常完整的框架,有 taken care of this concept for you。注释 // or if you want to use an "apikey" header, then do something like this:
主要用于自定义 Web 客户端(应用程序)。如果您的目标是拥有自定义客户端 HTTP/web 客户端,那么您的工作就是记住应用程序内存中其他地方的令牌变量,这不会作为标准在 HTTP 模块中。
我认为我链接的文章中您可能需要的是关于 storing authentication in the session 的部分。然后 HTTP 客户端只需要提供一次 API 密钥。
--
至于安全性,HTTP header 对于任何聪明到知道 HTTP 请求结构的人来说,并不比查询变量更安全。 (这是 HTTP 的基本知识。)这与 post 变量不比查询变量更安全。
- 如果您使用的是标准网络浏览器,唯一的好处是不会在地址栏中看到 API 键,但是无论如何您都应该为这些客户端使用 session cookie比每个后续请求中的 API 键。
- 如果您正在为应用程序创建自定义 Web 客户端,那么自定义 header 对于窥探 HTTP 流量的人来说就像查询变量一样容易可见。
强制 HTTPS 是您可以有效隐藏自定义 HTTP header 或流量嗅探器查询变量的唯一方法,为请求的每个部分和后续响应提供完全相同的保护。