redmix0901 / oauth2-client-sso
与oauth2客户端结合,创建单点登录的包
Requires
- league/oauth2-client: ^2.4
README
通过composer安装
composer require redmix0901/oauth2-client-sso
将文件config/config.php发布到config目录
$ php artisan vendor:publish --tag=oauth2-sso-config
使用
此中间件会在access token过期时自动刷新。
Route::middleware('oauth2-sso')
如果您想将用户重定向到Auth Server进行登录(如果用户未登录),请添加以下重定向。
Route::middleware('oauth2-sso:redirect')
如果要将token附加到cookie上,以便调用认证API,请添加cookie
Route::middleware('oauth2-sso:cookie')
或者您可以将两者结合使用
Route::middleware('oauth2-sso:cookie,redirect')
如果需要从Resource Server(Auth Server)id.todpev.vn验证用户Token,请使用config/auth.php中的guard和配置,如下所示
'api' => [ 'driver' => 'sso-api', 'provider' => 'users', 'hash' => false, ]
验证API将有两种情况
- 如果您没有将Resource Server和App Server分开,您可以通过cookie进行验证。
Route::middleware('oauth2-sso:cookie')
此中间件会将token附加到cookie,服务器将检查该token进行验证。
- 第二种情况是分离Resource Server和App Server:如果两个都是Laravel,有共同的APP_KEY,设置了可以共享cookie的子域名,并且声明了如上所示的中间件,则可以使用cookie进行验证。或者您必须将token附加到header。
'Authorization' => 'Bearer ' . $token
-在单页应用程序的使用情况下,当cookie上的token过期时,您可以调用request /oauth2/issueToken来获取新的token。如果出现错误、过期或注销,则返回以下消息
[ 'error' => true, 'data' => null, 'message' => 'Unauthenticated.', ]
按照以下方式修改配置
'defaults' => [ 'guard' => 'oauth2', 'passwords' => 'users', ], 'guards' => [ ... 'oauth2' => [ 'driver' => 'sso-session', ] ],
defaults不是必需的。如果您不修改defaults,则可以使用auth()->guard('oauth2')->user()
如果您想从请求中获取用户信息,可以使用以下方法。
$request->user()
如果您选择config mappingUser = true。
用户将自动映射到App Server数据库中的旧用户。
如果Auth Server返回一个新用户,它将自动创建一个具有Auth Server返回的字段的新用户,并将其与model User中的fillable映射。您需要在event中更新该用户的信息。
Redmix0901\Oauth2Sso\Events\UserSsoCreated::class
可以通过以下链接注销:/oauth2/logout或通过sso.logout路由名称。
可以通过以下方式登录:/oauth2/login或通过sso.login.authorization_code路由名称。
通过post方式使用email和password登录:/oauth2/login或通过sso.login.password_grant路由名称。