繁体   English   中英

Laravel 和 OAuth2 的流明 - 授权类型:客户端凭据有效,但如何正确使用用户名/密码方法

[英]Lumen of Laravel & OAuth2 - grant type: Client Credentials working but how to use Username/Password Approach correctly

我正在使用lucadegasperi 的Lumen 和OAuth2-Server-Laravel

我已成功设置客户端凭据,并且可以在 Postman 上发布:

grant_type - client_credentialsclient_id - id1 client_secret - secret1并接收成功(200):

{"access_token":"jiKaracRLX1fOR0Ls3w7aE7G5ukblFIkkB2jwBGw","token_type":"Bearer","expires_in":3600}作为响应。

......但我在这一点上完全迷失了。 我应该怎么做才能使用 OAuth2 添加用户名/密码方法?

我在文档中找到了Password Grant Type ,但我不知道接下来要做什么。 我是否需要创建另一个迁移表 - 用户? 如果是这样,我将如何验证传递的变量? 我很困惑,因为它也需要我提供client_idclient_secret

或者我应该通过post请求在函数中接收usernamepassword变量,在控制器中验证usernamepassword之前,使用Guzzle,我应该分别验证client_idclient_secret ,如果access_token为真,继续登录。这种做法对吗?

我也遇到了这个问题。

你可以使用这个配置: https : //github.com/dusterio/lumen-passport#configuration

你的模型“用户”需要这个:

use Laravel\Lumen\Auth\Authorizable;
use Laravel\Passport\HasApiTokens;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasApiTokens, Authenticatable, Authorizable;

    /** functions */
}

说明: 执行配置并执行通行证迁移后,您将看到在 oauth_clients 表中生成了两条记录,请注意,一条记录选择了 Personal_access_client 列,另一条记录选择了 password_client 列。

选择了personal_access_client 的记录将使用grant_type = client_credentials 的相应秘密。 这将返回应用程序的不记名令牌。

选择了 password_client 的记录您将使用相应的密码作为 grant_type = password。 这将为用户返回一个不记名令牌(您也需要发送用户名和密码)。

除了我上面解释的内容之外,您不需要在 User 模型中做任何事情,因为 Passport 会自行完成其余的工作。

在配置并且您的测试正常工作之后,您需要包含中间件身份验证以让应用程序单独工作。 有必要在这些路由的请求头中包含令牌。

Route::group(['prefix' => 'api', 'middleware' => 'auth'], function () 
{
    Route::post('authenticated_test', 'AuthController@routeAuthenticatedTest');
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM