java oauth2 例子_spring cloud oauth2 实现用户认证登录的示例代码

需求

在微服务架构中,我们有很多业务模块,每个模块都需要有用户认证,权限校验。有时候也会接入来自第三方厂商的应用。要求是只登录一次,即可在各个服务的授权范围内进行操作。看到这个需求,立马就想到了这不就是单点登录吗?于是基于这样的需求,作者使用spring-cloud-oauth2去简单的实现了下用户认证和单点登录。

相关介绍

OAuth2

OAuth2是一个关于授权的网络标准,他定制了设计思路和执行流程。OAuth2一共有四种授权模式:授权码模式(authorization code)、简化模式(implicit)、密码模式(resource owner password)和客户端模式(client credentials)。数据的所有者告诉系统同意授权第三方应用进入系统,获取这些数据。于是数据所有者生产了一个短时间内有效的授权码(token)给第三方应用,用来代替密码,供第三方使用。具体流程请看下图,具体的OAuth2介绍,可以参考这篇文章,写的很详细。(https://www.jb51.net/article/198292.htm)

ec1d19859129409ffc5498a1e6bee63a.png

Token

令牌(token)和密码(password)的作用是一样的,都可以进入系统获取资源,但是也有几点不同:

令牌是短期的,到期会自动失效,用户无法修改。密码是长期的,用户可以修改,如果不修改,就不会发生变化。

令牌可以被数据所有者撤销,令牌会立即失效。密码一般不允许其他人撤销,只能被操作权限更高的人或者本人修改/重制。

令牌是有权限范围的,会被数据所有者授予。

实现的功能

本篇介绍的是通过密码模式来实现单点登录的功能。

​ 在微服务架构中,我们的一个应用可能会有很多个服务运行,协调来处理实际的业务。这就需要用到单点登录的技术,来统一认证调取接口的是哪个用户。那总不能请求一次,就认证一次,这么做肯定是不行的。那么就需要在认证完用户之后,给这个用户授权,然后发一个令牌(token),有效期内用户请求资源时,就只需要带上这个标识自己身份的token即可。

架构说明

认证中心:oauth2-oauth-server,OAuth2的服务端,主要完成用户Token的生成、刷新、验证等。

微服务:mzh-etl,微服务之一,接收到请求之后回到认证中心(oauth2-oauth-server)去验证。

代码实现

使用到的框架是java基础的spring boot 和spring-cloud-oauth2

认证中心:

1、引入需要的maven包

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-oauth2

org.springframework.boot

spring-boot-starter-data-redis

org.springframework.boot

spring-boot-starter-actuator

因为spring-cloud-starter-oauth2中包含了spring-cloud-starter-security,所以就不用再单独引入了,引入redis包是为了使用redis来存储token。

2、配置application.yml

这里主要用到的是redis的配置,mysql数据库的配置暂时没有用到。

spring:

application:

name: oauth-server

datasource:

url: jdbc:mysql://localhost:3306/mzh_oauth?useSSL=false&characterEncoding=UTF-8

username: root

password: admin123

driver-class-name: com.mysql.jdbc.Driver

hikari:

connection-timeout: 30000

idle-timeout: 600000

max-lifetime: 1800000

maximum-pool-size: 9

redis:

database: 0

host: localhost

port: 6379

jedis:

pool:

max-active: 8

max-idle: 8

min-idle: 0

timeout: 10000

server:

port: 8888

use-forward-headers: true

management:

endpoint:

health:

enabled: true

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值