试图用JWT实现一个安全的身份验证方法,API将被许多客户端使用,包括web(单页面应用程序),桌面,移动我已经提出了这个系统:
客户端呼叫/授权/登录用户名和密码设置 在验证服务器返回两个令牌之后,会返回一个auth_token和一个refresh_token 身份验证令牌短暂15分钟,用于每个接下来的API调用 刷新令牌很长时间也许是一个12小时到一周的时间,但是使用格式为user_pass + long_string的密钥签名 令牌过期后,调用/ auth / renew被调用 验证令牌被发送以检查它到期的时间(不超过一个小时) 刷新令牌也会发送,并使用用户的密码进行验证 如果刷新令牌未过期并且认证令牌很长一段时间未过期,则会发回新的认证令牌 如果用户的密码已更改,则刷新标记无效,并且用户需要在其现有的短期身份验证令牌已过期后重新进行身份验证 虽然auth令牌有一个小窗口过期并且仍然有效,并且存在对数据库的调用; 这是一种使用JWT进行身份验证并处理密码更改和令牌刷新的整体安全方式吗?
不要尝试实现自己的身份验证基础结构。 机会,你会得到一个安全的实施是最小的,现在你将不得不维护所有的代码也。
更好地使用来自信誉良好的来源的授权服务器,如Thinktecture IdentityServer或Azure Active Directory,并使用标准库和协议。
我在您的提案中看到的一些问题:
如果你不签署访问令牌,什么阻止我改变内部的索赔? 如果您需要用户的密码来验证刷新令牌,则必须以可以以明文形式检索它的方式进行存储。 只能将密码存储为盐渍散列,以防止您获得明文。
链接地址:
http://www.djcxy.com/p/22277.html
上一篇:
Is this JWT based authentication method safe?
下一篇:
Authentication and Authorization in Microservices