Spring Security Oauth2实践(2) - 客户端对接

距离上次写分享已有半年没有更新了,由于工作上的新项目、生活等方面的原因,迟迟未整理Spring Security Oauth2这块的内容。最近全国各地都在抗疫中,大家工作生活都受到影响,基本不能出门,尽量在家办公。当然我也不例外,利用比平时上班省下的些许通勤时间整理这篇分享。

上篇文章分享了如何创建Oauth2授权服务器及最常用的授权码模式的使用过程,那么在实际项目中如何对接授权服务器实现对某些受保护资源的访问?相信大家都使用过各种平台的登录,比如CSDN注册/登录,除了服务本身提供的账号方式,还可以通过社交账号的如qq/github/baidu等方式登录,这种登录方式就是CSDN利用这些社交服务商提供的Oauth2授权服务来获取当前服务的信息,从而完成CSDN注册/绑定。在这个过程中,CSDN扮演的则是Oauth2客户端或第三方应用,本文将创建一个demo项目,分享实现Oauth2客户端获取授权的基本过程。
CSDN登录页

Oauth2客户端实现方式

Oauth2客户端对接实现一般有两种方式:

  1. 调用授权服务器提供的授权码接口、获取token接口等来对接(交互过程可参考Spring Security Oauth2实践(1) - 授权码模式),属于最常用的方式,笔者在实际开发小应用项目过程中也用到这种方式,理解起来也很方便,缺点是需要自定义大量编码、封装拓展性依赖开发人员水平、url 302转发、登录状态维护等需要额外开发控制、多个Oauth2 Provider时可能需要重新编码对接,关于这块过程可参考Spring Boot+OAuth2使用GitHub登录自己的服务.这里不再提供实现。

  2. 基于Spring Security Oauth2生态提供的方式对接,框架本身将大量的调用交互细节封装,并且维护用户认证登录状态,提供了很多拓展接口/类方便自定义业务逻辑,开发往往只需要实现特定的接口并注入到相应的业务中就可以完成。缺点在于门槛较高、理解起来需要一点时间、涉及到Spring Security认证状态维护、过滤器等细节往往需要阅读源码才理解怎么使用。一旦理解原理、配置使用等,则后续拓展将会非常方便,本文将采用这种方式实践。

Spring Security Oauth2客户端实践

值得注意的是,Spring Security OAuth2提供了一套客户端实现(本文采用的框架),Spring Boot也有它自己的方式,这种方式可参考Spring Boot官方指南中,实现、配置等与前者有区别。

Oauth2授权服务器使用上篇分享搭建的环境,SpringBoot采用2.x。

Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.oauth.client</groupId>
	<artifactId>oauth-client-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>oauth-client-demo</name>
	<description>oauth-client-demo</description>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.11.RELEASE</ve
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值