发布网友 发布时间: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:
网关的全局过滤器进行权限校验拦截。
总结:
通过在网关中整合授权服务实现单点登录,使系统在微服务架构下更加安全高效。希望以上内容能为您的项目提供帮助。