Laravel passport更改标头身份验证

Laravel passport更改标头身份验证,laravel,http,laravel-passport,Laravel,Http,Laravel Passport,我使用的是Laravel passport,它需要在每个请求中发送要发送的头身份验证 是否可以将标头的名称更改为X-Access-Token 我看到护照用的是包裹 League\OAuth2\Server\AuthorizationValidators 方法: /** * {@inheritdoc} */ public function validateAuthorization(ServerRequestInterface $request) { dd($request);

我使用的是Laravel passport,它需要在每个请求中发送要发送的头身份验证

是否可以将标头的名称更改为X-Access-Token

我看到护照用的是包裹

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]));

我试图在这里进行更改,但似乎在使用此方法之前就已经验证了标头。

有许多基本的代码段依赖于
授权
标头的存在

如果你愿意,你可以自己滚

还要注意,
authorization
是一个web标准请求头。X-Access-Token是一种
响应头
模式

*编辑** 根据我们下面的对话,您可以使用中间件和中间件优先级来指定哪个先运行,观察具有
X-Access-Token
的请求,并使用
addHeader
将该头的值转换为
授权

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处理请求时设置标头。

对于Laravel 5.8,您必须强制自定义中间件始终位于调用链的顶部 因此,在您的
app\kernel.php
中添加以下内容-

protected $middlewarePriority = [
        \App\Http\Middleware\AuthorizationToolMiddleware::class,
    ];


谢谢你的回复。我不知道从哪里开始搜索,如何开始搜索。@StefanoMaglione在使用Passport时尝试这样做太多工作了,Passport严重依赖League2/Oauth软件包。相反,我建议你在走这条路之前,试着弄清楚为什么有必要做出这样的改变,并重新考虑是否真的有必要。我同意你对复杂性的看法。我构建了一个api服务,需要使用一个自动工具进行测试,该工具需要标题名X-access-token。否则它就失败了。我构建的这个api服务是为了测试,为什么不同时发送
X-Access-Token
授权
?看来这会很有效的,很好的解决方法。有一个小错误,我这样修复:$request->headers->set('Authorization',$request->headers->get('X-Access-Token');返回$next($request);