Laravel护照变更header身份验证
Laravel passport change header authentication
我正在使用 Laravel 护照,它要求在每个请求中发送要发送的 header 身份验证。
是否可以将 header 的名称更改为 X-Access-Token?
我看到passport使用了包裹
League\OAuth2\Server\AuthorizationValidators;
方法:
/**
* {@inheritdoc}
*/
public function validateAuthorization(ServerRequestInterface $request)
{
dd($request);
if ($request->hasHeader('authorization') === false) {
throw OAuthServerException::accessDenied('Missing "Authorization" header');
}
$header = $request->getHeader('authorization');
$jwt = trim(preg_replace('/^(?:\s+)?Bearer\s/', '', $header[0]));
我试图在此处进行更改,但似乎 header 的验证发生在该方法之前。
有许多基础代码片段依赖于 authorization
header 的存在。
如果您愿意,可以自己动手。
另请注意,authorization
是一个 网络标准 请求 header。 X-Access-Token 是一个 response header
模式。
*编辑**
鉴于我们下面的对话,您可以使用中间件和中间件优先级来指示哪个先运行,观察具有 X-Access-Token
的请求并使用 addHeader
将 header 的值转换为 authorization
:
php artisan make:middleware AuthorizationToolMiddleware
然后在handle
函数中:
public function handle($request, Closure $next)
{
$request->headers->set('Authorization', $request->headers->get('X-Access-Token'));
return $next($request);
}
此中间件应在其他中间件之前执行,以确保在 passport 处理请求时设置 header。
对于 Laravel 5.8,您必须强制您的自定义中间件始终位于调用链的顶部
所以在你的 app\kernel.php
添加这个 -
protected $middlewarePriority = [
\App\Http\Middleware\AuthorizationToolMiddleware::class,
];
我正在使用 Laravel 护照,它要求在每个请求中发送要发送的 header 身份验证。
是否可以将 header 的名称更改为 X-Access-Token?
我看到passport使用了包裹
League\OAuth2\Server\AuthorizationValidators;
方法:
/**
* {@inheritdoc}
*/
public function validateAuthorization(ServerRequestInterface $request)
{
dd($request);
if ($request->hasHeader('authorization') === false) {
throw OAuthServerException::accessDenied('Missing "Authorization" header');
}
$header = $request->getHeader('authorization');
$jwt = trim(preg_replace('/^(?:\s+)?Bearer\s/', '', $header[0]));
我试图在此处进行更改,但似乎 header 的验证发生在该方法之前。
有许多基础代码片段依赖于 authorization
header 的存在。
如果您愿意,可以自己动手。
另请注意,authorization
是一个 网络标准 请求 header。 X-Access-Token 是一个 response header
模式。
*编辑**
鉴于我们下面的对话,您可以使用中间件和中间件优先级来指示哪个先运行,观察具有 X-Access-Token
的请求并使用 addHeader
将 header 的值转换为 authorization
:
php artisan make:middleware AuthorizationToolMiddleware
然后在handle
函数中:
public function handle($request, Closure $next)
{
$request->headers->set('Authorization', $request->headers->get('X-Access-Token'));
return $next($request);
}
此中间件应在其他中间件之前执行,以确保在 passport 处理请求时设置 header。
对于 Laravel 5.8,您必须强制您的自定义中间件始终位于调用链的顶部
所以在你的 app\kernel.php
添加这个 -
protected $middlewarePriority = [
\App\Http\Middleware\AuthorizationToolMiddleware::class,
];