使用 OAuth2-server for Lumen 拥有用户 table 而不是 oauth_clients
Own users table instead of oauth_clients with OAuth2-server for Lumen
我已经使用 Tutorial. The tutorial uses the OAuth2 server for Laravel + Lumen.
在我的 Lumen API 中成功实施了 OAuth2 服务器
很遗憾 documentation part of creating own grants 还没有。
在我的数据库中现在有 oauth_clients table。但我也有自己的 table users。还有一些关于用户的更多信息。所有实体都引用此 table.
现在我想检查 用户 table 的凭据 而不是 的 oauth_clients table。这可能吗?
oauth_clients table 仅用于管理 client_id 和 client_secret(以及范围等)。
您需要使用 PasswordGrant 而不是 ClientCredentialsGrant 来对用户进行身份验证(从而处理 users table 以及 oauth_clients).
PS:在 Lumen 中你可能会得到一个例外:
if (Auth::once($credentials)) {
return Auth::user()->id;
}
所以你需要用类似这样的方式重写它:
$user = User::where('username', strtolower($username))->first();
if (!isset($user)) {
return null;
}
if (app('hash')->check($password, $user->getAuthPassword())) {
return $user->id;
}
return null;
注意:您仍然需要 oauth_clients table 并至少定义一个 client_id/client_secret 组合(请注意,秘密不是散列,应该是普通的)
设置完成后,您将获得如下访问令牌(不完全是这样,取决于您的实施方式):
curl -X POST http://yourapp/access_token -d "grant_type=password&client_id=test&client_secret=testsecret&username=testuser&password=testpass"
我已经使用 Tutorial. The tutorial uses the OAuth2 server for Laravel + Lumen.
在我的 Lumen API 中成功实施了 OAuth2 服务器很遗憾 documentation part of creating own grants 还没有。
在我的数据库中现在有 oauth_clients table。但我也有自己的 table users。还有一些关于用户的更多信息。所有实体都引用此 table.
现在我想检查 用户 table 的凭据 而不是 的 oauth_clients table。这可能吗?
oauth_clients table 仅用于管理 client_id 和 client_secret(以及范围等)。
您需要使用 PasswordGrant 而不是 ClientCredentialsGrant 来对用户进行身份验证(从而处理 users table 以及 oauth_clients).
PS:在 Lumen 中你可能会得到一个例外:
if (Auth::once($credentials)) {
return Auth::user()->id;
}
所以你需要用类似这样的方式重写它:
$user = User::where('username', strtolower($username))->first();
if (!isset($user)) {
return null;
}
if (app('hash')->check($password, $user->getAuthPassword())) {
return $user->id;
}
return null;
注意:您仍然需要 oauth_clients table 并至少定义一个 client_id/client_secret 组合(请注意,秘密不是散列,应该是普通的)
设置完成后,您将获得如下访问令牌(不完全是这样,取决于您的实施方式):
curl -X POST http://yourapp/access_token -d "grant_type=password&client_id=test&client_secret=testsecret&username=testuser&password=testpass"