一种基于oauth2协议的用户认证系统的制作方法

文档序号:19320983发布日期:2019-12-04 00:31阅读:947来源:国知局
一种基于oauth2协议的用户认证系统的制作方法

本发明涉及web用户认证领域技术,尤其涉及一种基于oauth2协议的用户认证系统。



背景技术:

云计算作为一种新型的互联网模式,具有良好的发展势头和前景。但云计算的发展总体来说还处于前期阶段,许多问题阻碍云计算的发展,其中信息安全问题是人们比较关心的方面,在云计算的基础之上提供云服务,应用和数据隔离与共享伴随的安全隐患,用户的认证与访问管理就成为云计算安全的主要问题之一。为此,根据云计算的数据存储和服务的特点,选择第三方认证服务是一个不错的解决方案。



技术实现要素:

为了解决以上技术问题,本发明提出了一种基于oauth2协议的用户认证系统,并将认证服务设计为简洁高效模式,将微服务架构下用户认证的灵活高效可靠。

本发明在现有的第三方服务的基础会之上进行多方面的优化,使得对数据访问的安全性得到大大提高,利用jwt令牌特性服务器访问压力大幅度减轻,为云计算提供更为可靠的安全特性。

本发明的技术方案是:

一种基于oauth2协议的用户认证系统,

包括用户认证中心模块、redis令牌存储模块、用户中心模块,服务网关模块;

其中,

用户认证中心模块:对登录用户进行校验,校验合法后颁发jwt令牌;

redis令牌存储模块:该模块的功能包括存储用户认证之后颁发的令牌,客户端令牌校验;

用户中心模块:对用户信息进行管理的模块,同时对用户信息进行加密,提供供认证中心用户校验时的用户信息;

服务网关模块:使用网关对服务资源进行统一管理,校验访问者jwt令牌的合法性。

进一步的,

用户认证中心是整个认证项目的核心,对用户信息进行认证并颁发令牌;

首先用户在登录页面输入用户名和密码,发送post请求到用户认证中心url+port/auth/oauth/token,参数说明:grant_type:password,username:账号,password:密码,

此链接需要使用httpbasic认证,认证中心接受到用户请求,调用用户中心接口,校验通过后,生成jwt令牌,令牌使用的是springsecurity提供的jwthelper来创建,使用java提供keytool证书管理工具采用rsa加密算法生成秘钥证书,其命令为keytool-genkeypair-alias**-keyalgrsa-keypass**-keystore**-storepass**,将证书添加到认证工程中,用于生成令牌,使用openssl加解密工具包,导出公钥信息用于对令牌进行解密。将jwt令牌存入redis中,将短令牌即身份令牌写入cookie,返回给客户端。

进一步的,

redis令牌存储模块主要供服务网关调用,服务网关从cookie中获取令牌,取查询jwt令牌是否过期,如果过期则拒绝用户访问资源。

进一步的,

用户中心模块采用bcrypt方法对信息进行了加密。

进一步的,

服务网关模块对访问用户令牌进行校验的模块,用户访问服务网关,过滤器对header里的令牌,cookies里的令牌,redis里令牌是否过期进行校验,当校验全部通过之后,将请求转发到相应的资源服务上。

流转步骤如下:

步骤一:用户通过浏览器登录,向授权认证服务请求认证;

步骤二:认证服务认证通过向浏览器cookie写入token;

认证服务请求springsecurity申请令牌,认证服务将token和jwt令牌存储至redis中,认证服务向cookie写入token;

步骤三:客户端携带cookie中的token身份令牌及jwt令牌访问资源服务;

客户端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是httpheader中的jwt令牌;

客户端请求资源服务前在httpheader上添加jwt请求资源;

步骤四:网关校验token的合法性

用户请求必须携带token身份令牌和jwt令牌网关校验redis中token是否合法,已过期则要求用户重新登录;

步骤五、资源服务校验jwt的合法性并完成授权

资源服务校验jwt令牌,完成授权,拥有权限的方法正常执行,没有权限的方法将拒绝访问。

本发明的有益效果是

(1)本发明使用了jwt令牌,客户端与认证服务只需建立以一次连接就可以,后续客户端访问资源服务,无需再次验证,在资源服务端即可完成校验,从而减轻了认证服务器的压力。

(2)使用服务服务网关,可以对请求进行统一的收口,统一的过滤,简化代码的重复性,配合服务注册与发现,网关对请求代理后,还可以把请求分发到运转正常的服务消费端,分发的同时也实现了负载均衡。

(3)采用redis存储令牌,而非使用cookies存储,节约了存储空间,同时利用redis存储数据的特性,非常方便的完成令牌过期时间的判断。

附图说明

图1是令牌校验示意图;

图2是整体工程简图;

图3是网关简图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请包括用户认证中心模块、redis令牌存储模块、用户中心模块,服务网关模块,通过这几个模块来降低数据泄露的风险,同时减轻服务器访问压力。

各模块主要负责的功能如下:

用户认证中心模块:对登录用户进行校验,校验合法后颁发jwt令牌。

用户中心模块:对用户信息进行管理的模块,同时对用户信息进行加密(这里使用bcrypt加密),提供供认证中心用户校验时的用户信息。

redis令牌存储模块:该模块的功能包括存储用户认证之后颁发的令牌,客户端令牌校验。

服务网关模块:使用网关对服务资源进行统一管理,校验访问者jwt令牌的合法性

参照图2、3对这几大模块进行详解。

用户认证中心模块:用户认证中心是整个认证项目的核心,对用户信息进行认证并颁发令牌。

oauth2提供一下几种授权模式,授权码模式(authorizationcode)隐式授权模式(implicit)密码模式(resourceownerpasswordcredentials)客户端模式(clientcredentials)其中比较常用的授权码模式,密码模式,本方案选用密码模式进行授权。首先用户在登录页面输入用户名和密码,发送post请求到用户认证中心url+port/auth/oauth/token,参数说明:grant_type:password,username:账号,password:密码,注意此链接需要使用httpbasic认证,认证中心接受到用户请求,调用用户中心接口,校验通过后,生成jwt令牌,令牌使用的是springsecurity提供的jwthelper来创建,使用java提供keytool证书管理工具采用rsa加密算法生成秘钥证书,其命令为keytool-genkeypair-alias**-keyalgrsa-keypass**-keystore**-storepass**,将证书添加到认证工程中,用于生成令牌,同时本方案使用openssl加解密工具包,导出公钥信息用于对令牌进行解密。由于jwt令牌较长,因此将jwt令牌存入redis中,将短令牌即身份令牌写入cookie,返回给客户端。

redis令牌存储模块:本模块主要考虑到redis访问性能优势,数据有效时长的操作方便性,本模块主要供服务网关调用,服务网关从cookie中获取令牌,取查询jwt令牌是否过期,如果过期则拒绝用户访问资源。

用户中心模块:用户中心主要作为用户信息管理的模块,单独作为一个模块,使整个认证服务耦合度降低,脉络更加清晰,方便后期的维护。同时考虑到用户信息安全性,本方案采用bcrypt方法对信息进行了加密,大大提高用户信息的安全,即使泄露也不容易解密。

服务网关模块:服务网关模块对访问用户令牌进行校验的模块,用户访问服务网关,过滤器对header里的令牌,cookies里的令牌,redis里令牌是否过期进行校验,当校验全部通过之后,将请求转发到相应的资源服务上。

本发明通过这四大模块疏通了在微服务架构下的用户认证流程,参考图1,具体消息的流转步骤如下:

步骤一:用户通过浏览器登录,向授权认证服务请求认证。

步骤二:认证服务认证通过向浏览器cookie写入token(身份令牌)。

认证服务请求springsecurity申请令牌,认证服务将token(身份令牌)和jwt令牌存储至redis中,认证服务向cookie写入token(身份令牌)。

步骤三:客户端携带cookie中的token身份令牌及jwt令牌访问资源服务客户端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是httpheader中的jwt令牌

客户端请求资源服务前在httpheader上添加jwt请求资源。

步骤四:网关校验token的合法性

用户请求必须携带token身份令牌和jwt令牌网关校验redis中token是否合法,已过期则要求用户重新登录。

步骤五、资源服务校验jwt的合法性并完成授权

资源服务校验jwt令牌,完成授权,拥有权限的方法正常执行,没有权限的方法将拒绝访问。

以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1