Laravel Passport - 使用邮递员进行身份验证

时间:2017-11-23 17:40:36

标签: laravel oauth postman

我在Laravel 5中设置了Passport,并在用户使用此注册时创建了一个令牌。

$user->createToken('My Token')->accessToken;

当我创建一个新用户时,我可以在oauth_access_tokens表中看到一个如下所示的条目,我缩短了显示的ID ...

id     | user_id | client_id | name     | scopes | revoked
-----------------------------------------------------------
765765 | 193     | 1         | My Token | []     | 0

我想要允许访问的API路由受到保护,现在我试图通过在Postman中传递以下标题来允许访问...

Authorization | Bearer 765765
Accept        | application/json

但这回复了未经认证的回复,我哪里错了?

1 个答案:

答案 0 :(得分:4)

Laravel Passport使用oAuth2。它不像生成用户令牌并能够使用它进行身份验证那么简单。 oAuth2需要另一个步骤,称为令牌交换。

当您使用Facebook登录网站时,您将看到oAuth2进程正在运行。您单击使用Facebook登录按钮,然后您将被发送到Facebook,并且您将看到一个对话框,要求您确认或拒绝应用程序访问您的帐户(通常,您的帐户的特定部分,即{{1 }})。

该网站将拥有自己的Facebook客户帐户,并拥有自己的scopesclient ID。当您单击该按钮时,该网站会将您发送到Facebook以获得Facebook的许可和授权代码。该网站传递其client secret,请求的权限(client ID),随机生成的会话状态(以便稍后验证)和一个URL,以重定向到Facebook,在那里显示对话框。

当您接受时,Facebook会生成所谓的scopes并在您前往网站的路上(指定的重定向网址)以及会话状态(因此网站能够验证请求)向您发送回信息和授权码。

该网站的后端将要求Facebook更换authorization code的授权码,并提供access tokenclient ID,以便Facebook能够验证其真实性。 Facebook然后以client secret和到期时间回复。

现在,该网站可以使用访问令牌访问您的帐户,以便能够获取所请求的信息(例如您的登录电子邮件地址)。

它也可以跳过很多这个过程而不需要用户必须遵循整个重定向流程。要做到这一点,(至少在Passport中),您将需要一个密码授予客户端。如果您使用oAuth2对API进行身份验证,通常会执行此操作。

此处的过程是生成密码授予客户端:

access token

在您的数据库中,您将在php artisan passport:client --password 表中找到具有客户端ID和密码的密码授予客户端。您需要将此信息提供给使用您的API的任何人(例如移动电话/手机应用)。

现在,当您的用户想要登录时,您的API的消费者(在这种情况下是Postman)需要提供用户的凭据(用户名/密码)以及密码的客户端ID和密码授予客户。还有必要告诉Passport您要通过密码授权进行授权。

文档中给出的示例如下所示:

oauth_clients

成功后,Passport将返回200响应并返回一些包含访问令牌和刷新令牌的JSON。您使用访问令牌访问用户的帐户,并使用刷新令牌获取新的访问令牌(无需用户再次登录)。

您需要在Authorization标头中提供此访问令牌作为承载。