![](/img/trans.png)
[英]OAuth2 curl request returns 'The client credentials are invalid' for “grant_type = 'password'”
[英]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_credentials
, client_id - id1
client_secret - secret1
并接收成功(200):
{"access_token":"jiKaracRLX1fOR0Ls3w7aE7G5ukblFIkkB2jwBGw","token_type":"Bearer","expires_in":3600}
作为响应。
......但我在这一点上完全迷失了。 我应该怎么做才能使用 OAuth2 添加用户名/密码方法?
我在文档中找到了Password Grant Type ,但我不知道接下来要做什么。 我是否需要创建另一个迁移表 - 用户? 如果是这样,我将如何验证传递的变量? 我很困惑,因为它也需要我提供client_id
和client_secret
。
或者我应该通过post请求在函数中接收username
和password
变量,在控制器中验证username
和password
之前,使用Guzzle,我应该分别验证client_id
和client_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.