在一个新的项目技术选型如下:
后端:JAVA 11 / Spring Boot (2.7.1)
前端:Vue.js(vue2)
因涉及到权限认证,开始研究下如何在Spring Boot里实现,前前后后鼓捣花了一些时间,踩了一些坑,现把经验整理分享给大家。
笔者对比研究了一下,最终还是决定采用 oauth2协议的授权码模式(authorization code),理由是授权码模式(authorization code)是功能最完整、流程最严密的授权模式。
oauth2协议快速参考可看
理解OAuth 2.0 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
spring security是一个提供认证、授权、保护免收常规攻击的框架库,可用于命令式和响应式的WEB应用,也是Spring应用安全的事实标准。
建议读者多看几遍官方文档,我前前后后看了不下于3遍,某些章节反复看了N遍,尤其对于架构图要理解吃透Spring Security :: Spring Securityhttps://docs.spring.io/spring-security/reference/index.html
Spring Authorization Server是一个实现 OAuth 2.1 和 OpenID Connect 1.0 及其他规范的框架库。它基于Spring Security之上构建来提供一个安全的、轻量的、可定制化的认证服务框架,可用于提供OpenID Connect 1.0 Identity 服务和OAuth2授权服务。
建议至少看一遍官方文档,形成初步的理解
Spring Authorization Server Referencehttps://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包
然后输入以下命令运行程序
./gradlew :bootRun
正常运行会出现类似输出,可以看到日志里有提示监听9000端口
打开浏览器输入http://localhost:9000,会自动跳转到http://localhost:9000/login页面,这是默认的登录页面,输入用户名user 密码 password
登录成功会出现如下页面(因首页没有对应页面,所以提示404,实际表示已经登录成功)
截止到目前为止,我们已经把Spring Authorization Server这个样例代码跑通了。
预知后事如何,请看下回分解 (码字好累。。。。)