fig*_*r20 0 oauth laravel postman
我在Laravel 5中设置了Passport,并在用户使用此注册时创建了令牌。
$user->createToken('My Token')->accessToken;
Run Code Online (Sandbox Code Playgroud)
当我创建一个新用户时,我可以在oauth_access_tokens表中看到一个看起来像这样的条目,我缩短了显示的ID ...
id | user_id | client_id | name | scopes | revoked
-----------------------------------------------------------
765765 | 193 | 1 | My Token | [] | 0
Run Code Online (Sandbox Code Playgroud)
我想允许访问的API路由受到保护,现在我试图通过在邮递员中传递以下标头来允许访问...
Authorization | Bearer 765765
Accept | application/json
Run Code Online (Sandbox Code Playgroud)
但这返回未经身份验证的响应,我在哪里出错?
Laravel Passport使用oAuth2。它不像生成用户令牌并能够使用它进行身份验证那样简单。oAuth2需要另一步骤,称为令牌交换。
当您使用Facebook登录网站时,您将看到oAuth2流程正在运行。单击使用Facebook登录按钮,您将被发送到Facebook,并显示一个对话框,要求您确认或拒绝应用程序对帐户的访问(通常是帐户的特定部分,也称为scopes
)。
该网站将拥有自己的Facebook客户帐户,并拥有自己的client ID
和client secret
。当您单击该按钮时,网站会将您发送到Facebook,以获取您的许可和来自Facebook的授权码。该网站传递其client ID
,请求的权限(scopes
),随机生成的会话状态(以便稍后进行验证)和URL重定向到显示对话框的Facebook。
当您接受时,Facebook会生成所谓的,authorization code
然后将您发送回网站(指定的重定向URL)以及会话状态(以便网站能够验证请求)和授权代码。
然后,在其后端的网站将要求Facebook交换您的授权码,access token
并提供client ID
,client secret
以便Facebook能够验证其真实性。然后,Facebook会给出access token
一个有效期。
现在,该网站可以使用访问令牌访问您的帐户,以获取所请求的信息(例如用于登录的电子邮件地址)。
也可以跳过很多此过程,而无需用户必须遵循整个重定向流程。为此,(至少在Passport中),您将需要一个密码授予客户端。如果您要使用oAuth2对API进行身份验证,通常会这样做。
此处的过程将是生成密码授予客户端:
php artisan passport:client --password
Run Code Online (Sandbox Code Playgroud)
在数据库中,您将在oauth_clients
表中找到带有客户端ID和密码的密码授予客户端。您需要将此文件提供给使用API的用户(例如移动/手机应用程序)。
现在,当您的用户想要登录时,您的API的使用者(在本例中为Postman)将需要提供用户的凭据(用户名/密码)以及您的密码授予客户端的客户端ID和密码。还必须告知Passport您要通过密码授予进行授权。
文档中给出的示例如下所示:
$response = $http->post('http://your-app.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
],
]);
Run Code Online (Sandbox Code Playgroud)
成功后,Passport将返回200响应,并返回一些包含访问令牌和刷新令牌的JSON。您可以使用访问令牌来访问用户帐户,并使用刷新令牌来获取新的访问令牌(无需用户再次登录)。
您需要在授权标头中提供此访问令牌作为载体。