Laravel 5.3 + Passport:总是未经身份验证的错误
Posted
技术标签:
【中文标题】Laravel 5.3 + Passport:总是未经身份验证的错误【英文标题】:Laravel 5.3 + Passport: always unauthenticated error 【发布时间】:2017-09-01 04:48:45 【问题描述】:在我当前的项目中使用 Passport 时,我总是收到“未经身份验证的错误”。这就是我过去 3 天所做的:
安装和配置 Passport(如文档所述) 向 Postman 请求令牌(密码授予令牌) 使用令牌请求受保护的路由(auth:api 中间件) 得到 `“错误”:“未经身份验证。” ` 搜索、搜索和研究 得到 `“错误”:“未经身份验证。” `然后,我安装了一个新的 L5.3 和一个新的数据库并且工作正常。即使使用我当前的数据库!
我已经尝试了所有我发现但没有成功的解决方案......
谁能帮助我?任何想法将不胜感激。
谢谢。
【问题讨论】:
我猜您根据有关 OAuth 的文档在标头中将令牌作为授权参数发送,但是 apache 阻止此参数并且护照中间件无法验证您的请求,将身份验证名称更改为其他内容,例如令牌或密钥或所有内容除了授权。成功 【参考方案1】:我和你有同样的问题,到处寻找解决办法。
就我而言,这似乎是 Apache 的错。 Apache 正在删除标题“Authorization: Bearer TOKEN_HERE”,因此 auth:api 无法按预期工作(获得 401 未授权)。
我们最终尝试添加到我们的 .htaccess:
RewriteCond %HTTP:Authorization ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
它神奇地起作用了。
我真的希望它有所帮助,我们花了一整天的时间尝试了许多解决方案,这是对我们有用的解决方案。
【讨论】:
【参考方案2】:您使用哪个grant_type
生成此令牌?
可能的解决方案如下
1:如果你使用客户端凭证生成你的access_token,你必须开启client_credentials,中间件如下。
1.1 添加到\App\Http\Kernel.php中的routeMiddleware
'client_credentials' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
1.2 在您的路由中也使用“client_credentials”中间件。
Route::group(['prefix' => 'v1','middleware' => 'client_credentials'], function ()
// Your routes here
);
2:对于授予类型密码
2.1 : 创建密码授予客户端
php 工匠护照:client --password
2.2 : 请求带有以下标头字段的令牌
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
端点/oauth/token
您现在获得的令牌应该可以让您访问您的 api。
【讨论】:
【参考方案3】:我的问题是一个遗漏,我正在构建一个 GraphQL api,并在配置文件“graphql.php”的中间件行中放置
'middleware' => ['auth'],
当正确的方法是:
'middleware' => ['auth:api'],
【讨论】:
以上是关于Laravel 5.3 + Passport:总是未经身份验证的错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Laravel Passport (5.3) 记录身份验证尝试
Laravel 5.3 Passport API 在 Postman 中使用个人访问令牌未经身份验证