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 5.3 中未显示 Passport 组件

如何使用 Laravel Passport (5.3) 记录身份验证尝试

Laravel 5.3 Passport API 在 Postman 中使用个人访问令牌未经身份验证

在 Laravel 5.3 Passport 中添加 Access-Control-Allow-Origin 标头响应

Laravel 5.3 个人访问令牌 500

总是为我的 Laravel Passport 生成的 OAuth 2 令牌响应 401(未授权)