本次分享Oauth2的第三个实践——SSO单点登录。这个场景经常用于企业开发,集成多方系统认证。
CAS与Oauth2?
业界实现SSO一般采用CAS方案,案例也很多,也有很多其它标准和实现。CAS与Oauth2在实现SSO上的区别,可参考CAS的单点登录和oauth2的最大区别、 SSO with CAS or OAuth?两篇文章,相信读者读完后会有收获。
CAS是侧重于认证,Oauth2是认证、授权或控制对某些资源的访问权限。CAS客户端登录后获取到用户的资源后,判断是否有权限访问自己,而Oauth2客户端是需要获取用户资源,且需要Oauth2认证的客户端才可以访问。
在实现上CAS一般是不会关心具体是哪个客户端(可以自定义实现),而Oauth2服务端是给每个客户端都分配一个appId和secret才能访问Oauth2Resource并获取用户信息。
个人觉得,在企业SSO开发中,如果仅仅只需要认证,各系统间不需要授权访问,则可以采用CAS;如果需要认证、SSO,并且各系统间有资源访问认证需求、还有APP端对接,可以采用Oauth2实现SSO+授权。
客户端实现
相同的对接方式实现两个不同客户端,展示SSO的实践。
Maven依赖
springboot、spring-boot-starter-security版本均为2.1.11,spring-security-oauth2-autoconfigure版本为2.1.4.RELEASE,各版本对应匹配信息可参考maven中央仓库查询。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId