使用JWT实现单点登录

57 篇文章 2 订阅

JWT:JSON Web Token

JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
虽然JWT可以加密以在各方之间提供保密,但只将专注于签名令牌。签名令牌可以验证其中包含的声明的完整性,而加密令牌则隐藏其他方的声明。当使用公钥/私钥对签署令牌时,签名还证明只有持有私钥的一方是签署私钥的一方。

通俗来讲,JWT是一个含签名并携带用户相关信息的加密串,页面请求校验登录接口时,请求头中携带JWT串到后端服务,后端通过签名加密串匹配校验,保证信息未被篡改。校验通过则认为是可靠的请求,将正常返回数据。

主要应用于webAPI接口安全认证,用户在首次登录时生成token,并设置有效时间(建议2小时,因为微信就是2小时),然后将用户信息和token同时返回给浏览器(客户端),浏览器将其储存起来(sessionStorege或者VUEX)。每次请求接口时将利用ajax或axios调用http请求将token添加到请求头中。后端通过过滤器管道验证token是否存在,合法等,合法则放行,验证不通过则返回状态码401,没有权限。

代码如下:

 

 

 

 鉴权:每次路由跳转前验证是否有该路由的权限。(不是必须)

 后端过滤器验证token合法性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用JWT实现单点登录的代码示例: ``` import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; import java.util.HashMap; import java.util.Map; public class JWTUtils { private static final String SECRET_KEY = "yourSecretKey"; private static final long EXPIRATION_TIME = 1000 * 60 * 60 * 24; // 24 hours public static String generateToken(Map<String, String> payload) { Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME); return Jwts.builder() .setClaims(payload) .setExpiration(expirationDate) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } public static Map<String, String> verifyToken(String token) { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); return new HashMap<>(claims); } } ``` 以上代码是一个简单的JWT工具类,用于生成和验证JWT令牌。核心方法包括: 1. `generateToken`:生成JWT令牌的方法。传入一个`payload`参数,其中包含要在令牌中存储的数据。方法内部会设置令牌的过期时间,并使用密钥对令牌进行签名,然后返回生成的令牌字符串。 2. `verifyToken`:验证JWT令牌的方法。传入一个令牌字符串作为参数,方法内部会解析令牌并验证签名。如果验证通过,将返回一个包含令牌中数据的`Map`对象。 注意:在实际使用中,你需要将`SECRET_KEY`替换为你自己的密钥,并根据实际需求调整`EXPIRATION_TIME`的值。 希望以上代码对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解使用JWT实现单点登录(完全跨域方案)](https://download.csdn.net/download/weixin_38715772/12938468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Spring Security基于JWT实现SSO单点登录详解](https://download.csdn.net/download/weixin_38697328/12746825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [基于JWT实现单点登录](https://blog.csdn.net/Lyh_ok/article/details/124776718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值