MCloud - OAuth2 认证中心

mcloud-oauth2-server.svg?branch=master

badge.svg?branch=master

简介

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

3e65e05ddf8f12a2cb433ed504a1590b.png

快速使用

本项目属于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

d417bf8ee2f4675177f8159d244770e3.png

使用 Postman 调试API

前提:

了解Postman并且安装了 Chrome 的 Postman 插件

首先自然是启动服务,然后我们在Postman中请求 http://localhost:8043/uaa/api/v1/users/ ,此时因为还未进行认证,所以服务器返回的是 401 的状态码:

9a5e3dca9afc711b9fbd03238e01d785.png

现在我们通过Postman 自带的OAuth认证功能进行认证:

8ed4f0323e1511d9ec5cce22f46327d0.png

a49d556ff5a834a9bb095fad27dc432e.png

相关项:

Token Name access_token

Client ID: mcloud-blog

Client Secret: 123456

Scope: 可以为空,此处不填

Grant Type: Authorization code

d9c1f332a0b70fae1518b9a8273dd6b2.png

默认用户:

用户名 user

密码 123456

5f5772b577a0fee367601290b912c608.png

当我们授权之后,就可以得到 access_token,此时选中并点击 Use Token,然后我们再次访问之前无权限的 API

50be13b85df8ad731ebc47ccaeeb39c1.png

服务器已成功返回 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.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐