.net core使用identity server4初步实现了一套用户统一认证服务器,用了两种认证模式一种password认证,一种是Implicit模式,客户端即支持API的用户认证也支持其他系统的跨系统认证。
.net的客户端就不用再说了,直接使用identity server4提供的功能,下面主要说下php下的laravel框架客户端开发。
1、需要引入两个库
composer require jumbojett/openid-connect-php
oauth2.0的认证,支持oauth2.0的4种认证模式。
composer require lcobucci/jwt
解析认证后的token,分析认证用户信息。
2、去掉自带的Auth的controller新建AuthController
两个方法一个进行登录认证,一个callback处理认证信息
public function login()
{
$oidc = new OpenIDConnectClient('http://localhost:5000',
'DotnetCoreClient');
$oidc->setResponseTypes(array('id_token'));
$oidc->setRedirectURL('http://localhost:8090/call_back'); //设置项目RedirectURL
$oidc->addScope(array('openid profile'));
$oidc->setAllowImplicitFlow(true);
$oidc->addAuthParam(array('response_mode' => 'form_post'));
$oidc->authenticate();
}
public function callback()
{
$token = (new Parser())->parse((string)$_POST['id_token']); // Parses from a string
$user = new User();
$user->name = $token->getClaim('nickname');
$user->id = $token->getClaim('UserId');
if (!User::where('id', $user->id)->first())
$user->save();
//$user->update();
Auth::login($user);
return redirect('/');
}
这其中主要就是要注意RedirectURL,这个在认证服务端也要做设置。
然后就是回调登陆后,laravel的每个页面都要去数据库验证一下,所有这里要先建立一个users表,初始字段包括id name,
其他字段可自行添加处理,保存到自己的数据库,以便后续验证。
3、路由配置
Route::get('/', 'HomeController@Index');
Route::get('login', 'AuthController@Login')->name('login');
Route::post('call_back', 'LoginController@Callback')->name('call_back');
在 app/Http/Middleware/VerifyCsrfToken.php 中,添加 except 规则,去掉call_back的csrf验证。
完毕。总体来说项目是初步搭建起来了,后期继续深度学习oauth2.0,indenity server4。
https://github.com/jfwangncs/IdentityMicroServer/PHPClient
网友评论