- String generateToken(int userId, int key) {
- byte[16] data = random()
- expires = time() + 3600
- raw = hex(data) + "-" + userId + "-" + expires
- signature = hmac(sha256, raw, key)
- return raw + "-" + signature
- }
大年夜家可以大年夜膳绫擎这段代码中看到构成令牌的那四个部分。个中,HMAC是用于验证前三个元素有效性的令牌,并最终会添加到raw的结尾。
- bool validateToken(token, user) {
- parts = token.split("-")
- str = parts[0] + "-" + parts[1] + "-" + parts[2]
- generated = hmac(sha256, str, key)
- if !constantCompare(generated, parts[3]) {
- return false
- }
- if parts[2] < time() {
- return false
- }
- if parts[1] != user {
- return false
- }
- return true
- }
膳绫擎这段示例代码演示的是验证和计算令牌有效性的常用办法。起首我们须要将令牌拆分成它的四个构成部分,然后第一步就是应用前三个部分生成并验证HMAC的有效性(与之前的HMAC进行比较)。比较时光必定要确保应用的是固准时光,如许可以避免基于时光的进击。如不雅验证成功,我们接下来就要确保令牌没有过时,最落后行用户匹配。但在真实场景中,最麻烦的工作就是让用户的浏览器在发送所有请求时主动提交令牌。
实际上在开辟应用的过程中,绝大年夜多半的现代框架都已经帮我们搞定则一切了。框架库可以处理XHR,并将令牌主动插入到请求信息(包含表单)中。然则如不雅框架没有帮我们实现的话,我们也可以本身实现这种功能。这一步重要可以分为两个部分,一个是处理表单提交,另一个是处理XHR。下面这段示例代码可以处理onclick事宜回调:
- var target = evt.target;
- while (target !== null) {
- if (target.nodeName === 'A' || target.nodeName ===
- 'INPUT' || target.nodeName === 'BUTTON') {
- break;
- }
- targettarget = target.parentNode;
- }
- // We didn't find any of the delegates, bail out
- if (target === null) {
- return;
- }
我们可以将这段代码添加到文档中,而不是添加到零丁的表单或可点击的元素之中,因为很有可能表单或元素根本就不存在与页面DOM之中。我们所指的元素是用户可以点击的器械,因为DOM树的构造以及事宜处理体系的不合,所以我们要寻找的是那种可以提交表单的元素,例如input或button标签。
推荐阅读
从不用try-catch实现的async/await语法来说说错误处理
async function asyncTask(cb) { async function process() { const user = await UserModel.findById(1) .catch(err => Promise.reject(() => { // deal with error on lo>>>详细阅读
地址:http://www.17bianji.com/lsqh/38424.html
1/2 1