Spring boot和Vue.js实现基于oauth2授权码模式的认证 (一)

在一个新的项目技术选型如下:

   后端:JAVA  11 / Spring Boot  (2.7.1)

   前端:Vue.js(vue2)

  因涉及到权限认证,开始研究下如何在Spring Boot里实现,前前后后鼓捣花了一些时间,踩了一些坑,现把经验整理分享给大家。

权限认证模式

      笔者对比研究了一下,最终还是决定采用 oauth2协议的授权码模式(authorization code),理由是授权码模式(authorization code)是功能最完整、流程最严密的授权模式。

  oauth2协议快速参考可看

理解OAuth 2.0 - 阮一峰的网络日志icon-default.png?t=M666http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

技术框架

     Spring Security(5.7.2)

      spring security是一个提供认证、授权、保护免收常规攻击的框架库,可用于命令式和响应式的WEB应用,也是Spring应用安全的事实标准。

      建议读者多看几遍官方文档,我前前后后看了不下于3遍,某些章节反复看了N遍,尤其对于架构图要理解吃透Spring Security :: Spring Securityhttps://docs.spring.io/spring-security/reference/index.html

    Spring Authorization Server (0.3.0)

      Spring Authorization Server是一个实现 OAuth 2.1 和 OpenID Connect 1.0 及其他规范的框架库。它基于Spring Security之上构建来提供一个安全的、轻量的、可定制化的认证服务框架,可用于提供OpenID Connect 1.0 Identity 服务和OAuth2授权服务。

     建议至少看一遍官方文档,形成初步的理解
Spring Authorization Server Referenceicon-default.png?t=M666https://docs.spring.io/spring-authorization-server/docs/current/reference/html/index.html

     授权服务功能之前是在Spring官方的一个叫Spring Security OAuth的项目来实现,早已经不维护了,建议转到Spring Authorizaiton Server这个项目上,具体细节可参考下面文章
再见,Spring Security OAuth!! - 知乎官宣新品最近,Spring 官方又推出了《 Spring Authorization Server》项目: 本次将 《 Spring Authorization Server》项目正式上线,去掉了之前的体验状态,此举恰逢 0.2.0 版本发布,这也是第一个正式支持的生产…https://zhuanlan.zhihu.com/p/406125789

跑通样例代码

     看完上述的文档后,开始实践新技术的做法就是跑通样例代码,请先克隆一份样例代码到本地

git clone https://github.com/spring-projects/spring-security-samples.git

进入目录

spring-security-samples\servlet\spring-boot\java\oauth2\authorization-server

修改gradle.properties文件,把spring-security.version设为5.7.2

version=5.7.0-SNAPSHOT
spring-security.version=5.7.2

 修改build.gradle文件,将org.springframework.boot设为2.7.1

plugins {
	id 'org.springframework.boot' version '2.7.1'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id "nebula.integtest" version "8.2.0"
	id 'java'
}

修改src/main/resources/application.xml文件,防止出现whitelabel错误页面

server:
  port: 9000
  error:
    whitelabel:
      enabled: false

 运行gradle构建

./gradlew build

正常的话应该显示构建成功的消息,会出现build目录,在build/libs目录会有jar包 

Spring boot和Vue.js实现基于oauth2授权码模式的认证 (一)_第1张图片

然后输入以下命令运行程序

./gradlew :bootRun

 正常运行会出现类似输出,可以看到日志里有提示监听9000端口

Spring boot和Vue.js实现基于oauth2授权码模式的认证 (一)_第2张图片Spring boot和Vue.js实现基于oauth2授权码模式的认证 (一)_第3张图片

 打开浏览器输入http://localhost:9000,会自动跳转到http://localhost:9000/login页面,这是默认的登录页面,输入用户名user 密码 password

Spring boot和Vue.js实现基于oauth2授权码模式的认证 (一)_第4张图片

 登录成功会出现如下页面(因首页没有对应页面,所以提示404,实际表示已经登录成功)

Spring boot和Vue.js实现基于oauth2授权码模式的认证 (一)_第5张图片

截止到目前为止,我们已经把Spring Authorization Server这个样例代码跑通了。 

预知后事如何,请看下回分解 (码字好累。。。。)

      

你可能感兴趣的:(JAVA,网络安全,spring,java,oauth2)