ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Minecraft正版登录(获取32位token)

2020-03-09 21:09:57  阅读:505  来源: 互联网

标签:请求 32 用户 认证 token session Minecraft 服务端


因mojang为方便服务端去accesstoken,所以将accesstoken采用jwt

什么是jwt:

jwt全称:JSON WEB TOKEN

起源

说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。

传统的session认证

我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。但是这种基于session的认证使应用本身很难得到扩展,随着不同客户端用户的增加,独立的服务器已无法承载更多的用户,而这时候基于session认证应用的问题就会暴露出来.

基于session认证所显露的问题

Session: 每个用户经过我们的应用认证之后,我们的应用都要在服务端做一次记录,以方便用户下次请求的鉴别,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大。扩展性: 用户认证之后,服务端做认证记录,如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

基于token的鉴权机制

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。流程上是这样的:用户使用用户名密码来请求服务器服务器进行验证用户的信息服务器通过验证发送给用户一个token客户端存储token,并在每次请求时附送上这个token值服务端验证token值,并返回数据这个token必须要在每次请求时传递给服务端,它应该保存在请求头里, 另外,服务端要支持CORS(跨来源资源共享)策略,一般我们在服务端这么做就可以了Access-Control-Allow-Origin: *。那么我们现在回到JWT的主题上。

JWT长什么样?

JWT是由三段信息构成的,将这三段信息文本用.链接一起就构成了Jwt字符串。就像这样:

eyJhbGcioiJIUzl1Ni9.eyJzdWioil4YzU3ZTViOGQ2YjOxMDNIODUOZGE3Y2JhM2EOMWFjZilsIm5iZil6MTU3MTI40TkzMCwieWdndCl6ljdkMDk3YTk2ZTlyoDRkMDhhZjQoMzY4NDkzMDQOODMSliwiC3ByljoiZmRIZTQ3YWJmYmZINDAXMmlyODAyMzQ1MTQ3NDY3MWQiLC.8OCzli-E8F-hq2pnUtfWTK2aAigjRJgIxil7s1lHfkk

我们可以通过.来作为分割,会获得三段字符串,一、二两段可以通过Base64解码得到以下字符串:

{
  "alg":"HS256"
}
{
 "sub":"8c57e5b8d6b4103e854da7cba3a41acf",
 "nbf":1571289930,
 "yggt":"7d097a96e2284d08af44368493044839",
 "spr":"fdee47abfbfe4012b28023451474671d",
 "roles":[],
 "iss":"internal-authentication",
 "exp":1571462730,
 "iat":1571289930
}

根据mojang提供的wiki介绍,可以获取yggt得到所需要的token值

所以token为7d097a96e2284d08af44368493044839

标签:请求,32,用户,认证,token,session,Minecraft,服务端
来源: https://blog.csdn.net/BaiBao132/article/details/104761145

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有