首页 热点资讯 义务教育 高等教育 出国留学 考研考公

如何用java写一套单点登录系统?

发布网友 发布时间:2024-09-07 10:11

我来回答

1个回答

热心网友 时间:2024-09-14 12:12

在微服务架构中,网关作为关键的流量入口,承担着授权鉴权的重要职责。通常的做法是:由授权服务器生成JWT(JSON Web Token)令牌,所有请求在网关层统一验证,判断权限等操作。API网关则扮演OAuth2.0的资源服务器角色,实现客户端权限拦截、令牌解析,并将当前登录用户信息转发给下游微服务,使微服务无需关注令牌格式解析及OAuth2.0相关机制。

流程如下:

搭建微服务授权中心(Auth):

本文采用JWT非对称加密(公钥私钥方式)实现。

JWT简介:

JSON Web Token(JWT)是一种开放标准,定义了简洁、自包含的协议格式,用于在通信双方间传递JSON对象,这些信息经过数字签名后可以被验证和信任。JWT支持HMAC算法或使用RSA公钥/私钥对进行签名,以防止被篡改。更多详情可参考官网:jwt.io/ 和标准:tools.ietf.org/html/rfc...

JWT的优点:

缺点:

JWT令牌长度较长,占存储空间较大。

JWT结构:

一个JWT实际上是由三部分组成:头部、载荷和签名。

头部(Header):

描述JWT的基本信息,如类型(JWT)及使用的签名算法(如HMACSHA256或RSA)。

表示为一个JSON对象,然后进行base加密,构成JWT的第一部分。

载荷(Payload):

存放有效信息,包含iss(签发者)、sub(面向的用户)、aud(接收者)、exp(过期时间)、nbf(生效前时间)、iat(签发时间)、jti(唯一标识)等部分。

定义payload内容,然后进行base加密,得到JWT的第二部分。

签名(Signature):

由三部分组成,使用base加密后的header与payload连接后的字符串,与secret进行组合加密,构成JWT的第三部分。

注意:secret保存在服务器端,用于JWT的生成和验证,应严格保密,不应泄露给客户端。

生成jks证书文件:

使用JDK自动工具生成。

命令格式示例:

keytool -genkeypair -alias jwt -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/jwt/jwt.jks -storepass 123456

将生成的jwt.jks文件放到授权服务器的resource目录下。

查看公钥信息:

引入相关依赖,配置授权服务器。

在oauth_client_details表中添加第三方客户端信息。

配置Spring Security:

获取会员信息,通常通过Feign从member服务获取。

JWT配置:

在yml文件中添加JWT配置。

扩展JWT存储内容:

根据业务需求,自定义字段添加到JWT中,通过实现TokenEnhancer接口实现内容增强。

配置资源服务器(可省略):

主要流程包括网关启动时获取公钥、过滤不需要认证的url、全局过滤器进行权限校验等。

获取token:

网关端口为8888,登录使用token进行访问资源。

校验token:

网关的全局过滤器进行权限校验拦截。

总结:

通过在网关中整合授权服务实现单点登录,使系统在微服务架构下更加安全高效。希望以上内容能为您的项目提供帮助。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com