android 用户管理专题之基于oauth2协议的服务认证,mcloud-oauth2-server: mcloud-oauth-server 基于Spring OAuth2,实现了OAuth2认证...
MCloud - OAuth2 认证中心简介mcloud-oauth-server 基于Spring OAuth2,实现了OAuth2认证服务器以及资源服务器,并以 Restful API 的方式提供了OAuth 客户端以及用户的管理功能。项目中主要使用了以下技术:Java8Spring 相关 Spring, Spring Mvc, Spring Cloud, Spring data jpa, S
MCloud - OAuth2 认证中心
简介
mcloud-oauth-server 基于Spring OAuth2,实现了OAuth2认证服务器以及资源服务器,并以 Restful API 的方式提供了OAuth 客户端以及用户的管理功能。项目中主要使用了以下技术:
Java8
Spring 相关 Spring, Spring Mvc, Spring Cloud, Spring data jpa, Spring Boot,Hibernate
mapstruct 主要用于DTO 与 Entity 之间的转换
flywaydb 以版本化的方式管理数据库脚本
thymeleaf 模板框架,主要用于登陆界面以及OAuth2认证页面
Redis 主要用作缓存实现 (暂未实现)
lombok 主要用于简化 Javabean 开发,只需使用注解即可生成 Javabean 的 get/set/equals 等方法
认证流程
OAuth2认证流程可参考博客 理解OAuth 2.0 ,此处不再赘述。
Features
认证服务器 使用Spring Security 结合 JWT Token 实现认证服务,提供了功能完整的 OAuth2 认证服务器。
资源服务器 实现了以下两种方式进行OAuth2 相关资源的管理
以 RestAPI 形式提供服务来管理资源:http://localhost:8043/uaa/swagger-ui.html
快速使用
本项目属于MCloud 系列中的OAuth2认证服务,故项目中添加了Spring Cloud的依赖,项目启动时会自动在 mcloud-eureka 服务发现与注册中心注册,所以在启动此项目之前,需要先启动 mcloud-eureka 服务,若不希望项目在注册中心注册,请将以下代码注释或是直接删除:
pom.xml
org.springframework.cloud
spring-cloud-starter-eureka
OAuthServerApplication
//此注解是用于添加 EurekaClient 支持,如不需要Eureka支持,则请删除
@EnableEurekaClient
创建数据库
请使用 mysql 客户端或是其他你喜欢的工具创建数据库,默认的数据库名称为 db_oauth
执行初始化脚本
因为项目使用了flywaydb 进行数据库脚本的管理,所以还需修改 pom.xml中 flywaydb 插件的数据库名,用户名以及密码:
pom.xml
org.flywaydb
flyway-maven-plugin
4.2.0
root
你的数据库密码
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/数据库名称
修改相关配置之后,请在项目根目录下执行maven命令:
mvn flyway:migrate
至此,数据库已成功创建,最后还需修改项目的数据库配置:
application.yml
spring:
datasource:
#TODO 根据每个项目自行设置
url: jdbc:mysql://localhost/数据库名称
username: 用户
password: 密码
driver-class-name: com.mysql.jdbc.Driver
启动OAuth2认证服务
所有准备工作已经完成,现在,让我们启动服务,在项目根目录下运行maven命令:
mvn clean install
mvn spring-boot:run
如果你使用的是 Idea 或 eclipse 开发,请直接运行 OAuthServerApplication 这个方法即可启动服务。
访问地址
http://localhost:8043/uaa/swagger-ui.html
使用 Postman 调试API
前提:
了解Postman并且安装了 Chrome 的 Postman 插件
首先自然是启动服务,然后我们在Postman中请求 http://localhost:8043/uaa/api/v1/users/ ,此时因为还未进行认证,所以服务器返回的是 401 的状态码:
现在我们通过Postman 自带的OAuth认证功能进行认证:
相关项:
Token Name access_token
Client ID: mcloud-blog
Client Secret: 123456
Scope: 可以为空,此处不填
Grant Type: Authorization code
默认用户:
用户名 user
密码 123456
当我们授权之后,就可以得到 access_token,此时选中并点击 Use Token,然后我们再次访问之前无权限的 API
服务器已成功返回 200 的状态码,并返回了用户列表。
其他
因本项目使用了 lombok 进行开发,在开发之前需要安装插件,若使用的是 IDEA 进行开发,请自行搜索并安装 lombok 插件,否则会导致编译错误
若是进行二次开发,请替换 keystore.jks (非常重要) ,否则会导致安全风险,keystore.jks 可使用jdk 工具生成,也可自行使用其他工具生成非对称密钥对。
意见及建议
如果你有任何好的意见以及建议,请提Issue给我,如果使用的是码云,可直接发表评论或是私信给我。
最后,如果你觉得此项目对你有所帮助,欢迎点赞支持,若是你愿意参与到项目中,请fork以及提PR给我。
License
Copyright 2017 http://www.javaroad.me
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
更多推荐
所有评论(0)