我想在我的控制下使用外部OAuth2服务器来验证Laravel 5.2应用程序的用户.作为客户端库,我想使用软件包league/oauth2-client据我所知,需要实现自定义用户提供程序,但我不确定所有必需步骤的大图.
这个想法是用户为我的Laravel应用程序提供凭据,换句话说client credentials就是使用该方法.然后,承载令牌和刷新令牌存储在客户端侧.每次客户端发出请求时,必须由OAuth服务器验证令牌.OAuth服务器还提供一些基本用户信息,如电子邮件和名称.因此,在我的应用程序中,本地用户和OAuth用户之间必须存在某种链接.这是通过一个简单的表来实现的
+-------------------+
| Users |
+-------------------+
| id | int(10) |
| oauthId | int(10) |
+---------+---------+
Run Code Online (Sandbox Code Playgroud)
首先,我在laravel.io上按照本指南创建了一个基本的提供程序框架.但此时我有几个问题:
该方法retrieveById是应该从OAuth服务返回任何用户还是只允许请求发布者的用户看到?
我的OAuth服务器已经为每个用户进行了权限检查.如果retrieveById应该返回任何现有用户,我的权限检查OAuth服务器是否毫无价值?这将是我的架构中的一个缺陷.
某些方法必须返回\Illuminate\Contracts\Auth\Authenticatable接口的实现.我在哪里实现这个?这应该是试图验证的用户的表示吗?如果这应该代表我的模型中的用户,我遇到的问题是我不知道返回值,getAuthPassword因为此信息在我的OAuth服务器上.我怎么解决这个问题?
正如您所看到的,我在解决整个身份验证过程中如何协同工作方面遇到了问题.非常感谢您的帮助.
我想扩展Laravel股票身份验证,以在利用现有功能的同时使用OAuth服务器进行用户检索和身份验证。我已经设法将扩展EloquentUserProvider为部分覆盖/扩展Illuminate\Contracts\Auth\UserProvider合同的实现。当前的实现如下所示:
class EloquentOauthServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return HcOAuthProvider;
*/
public function boot()
{
Auth::provider('oauth',function($app){
$model = $app['config']['auth.providers.oauth.model'];
$repository = new OauthUserRepository();
return new EloquentOauthUserProvider($app['hash'], $model, $repository);
});
}
}
Run Code Online (Sandbox Code Playgroud)
在auth.php配置中,我像这样更改了描述符:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'oauth',
],
]
'providers' => [
'oauth' => [
'driver' => 'oauth',
'model' => App\Models\User::class,
],
]
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是可行的,我可以覆盖添加逻辑的方法。但我意识到,我还需要覆盖的一些方法SessionGuard类(login并logout要具体),因为我要保存和检索OAuth的具体使用Laravel会话实现令牌。周围有一些建议,但它们要么不起作用(也许他们在Laravel 5.2之前就起作用了),要么需要重写 …