var http = require('http');
var url = require("url");
var crypto = require("crypto");
var port = 18080; function sha1(str){
var md5sum = crypto.createHash("sha1");
md5sum.update(str);
str = md5sum.digest("hex");
return str;
} function validateToken(req,res){
var query = url.parse(req.url,true).query;
//console.log("*** URL:" + req.url);
//console.log(query);
var signature = query.signature;
var echostr = query.echostr;
var timestamp = query['timestamp'];
var nonce = query.nonce;
var oriArray = new Array();
oriArray[0] = nonce;
oriArray[1] = timestamp;
oriArray[2] = "token";//这里是你在微信开发者中心页面里填的token,而不是****
oriArray.sort();
var original = oriArray.join('');
console.log("Original str : " + original);
console.log("Signature : " + signature );
var scyptoString = sha1(original);
if(signature == scyptoString){
res.end(echostr);
console.log("Confirm and send echo back");
}else {
res.end("false");
console.log("Failed!");
}
} var webSvr = http.createServer(validateToken);
webSvr.listen(port,function(){
console.log("Start validate");
});

与PHP的源码有异曲同工之处;

 private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"]; $token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}

再看小新写的nodejs版本;

 var http = require('http');
var crypto = require('crypto'); var server = http.createServer(); server.on('request',function (req, res){
res.writeHead(200, {'Content-Type': 'text/plain'}); var signature = require('url').parse(req.url,true).query.signature
var timestamp = require('url').parse(req.url,true).query.timestamp
var echostr = require('url').parse(req.url,true).query.echostr
var nonce = require('url').parse(req.url,true).query.nonce
var token = 'Token';
var tmpArr = Array(token, timestamp, nonce).sort().join("");
var sha1 = crypto.createHash('sha1');
sha1.update(tmpArr);
tmpArr = sha1.digest('hex');
if(tmpArr == signature){
res.end(echostr);
}else{
res.end('404');
} }); server.listen(8088);

大体思路就是接受微信服务器发来的请求;

拆分参数;将参数排序、拼接、加密,与参数其中之一比对;

成功返回其中参数之一;

失败false;

微信token认证方法原理的更多相关文章

  1. 微信token验证失败的几种情况

    最近在研究用PHP做微信开发的时候,“修改配置时”,总是遇到token验证失败的提示.历经一番查找,种种输出日志和echo,发现,如果不echo调试信息,也不写日志,就不需要ob_clean(),如果 ...

  2. OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法

    OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...

  3. 基于Token认证的多点登录和WebApi保护

    在文章中有错误的地方,或是有建议或意见的地方,请大家多多指正,邮箱: linjie.rd@gmail.com 一天张三,李四,王五,赵六去动物园,张三没买票,李四制作了个假票,王五买了票,赵六要直接F ...

  4. Java实现基于token认证

    随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...

  5. token的工作原理及其功能

    一.前言 登录模块是我们在前端项目中一定会有的模块,模块中有一个重要的部分是用户登录验证,对于验证用户是否登录过,我们直接处理办法是检查缓存中是否存在token值,若存在则用户可直接登录,反之,用户需 ...

  6. 42.JSON Web Token认证

    JSON Web Token认证介绍 简称JWT认证,一般用于用户认证 JWT是一种相当新的标准,可用于基于token的身份验证 与内置的TokenAuthentication方案不同,JWT不需要使 ...

  7. 【翻译】asp.net core2.0中的token认证

    原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...

  8. flask token认证

    在前后端分离的项目中,我们现在多半会使用token认证机制实现登录权限验证. token通常会给一个过期时间,这样即使token泄露了,危害期也只是在有效时间内,超过这个有效时间,token过期了,就 ...

  9. laravel5.7 前后端分离开发 实现基于API请求的token认证

    最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...

随机推荐

  1. Topo软件

    http://jung.sourceforge.net/#! http://www.netdisco.org/ http://sourceforge.net/projects/toponet/ htt ...

  2. CreateFile函数详解(确实很详细)

    CreateFile The CreateFile function creates or opens the following objects and returns a handle that ...

  3. Android 禁止软键盘自动弹出

    Android系统对EditText这个控件有监听功能,如果某个Activity中含有该控件,就会自动弹出软键盘让你输入,这个看似人性化的方案有 时候并不被用户喜欢的,所以在有些情况下要禁用该功能.这 ...

  4. [工具]Mac下非常好用的快捷终端Dterm

     [工具]Mac下非常好用的快捷终端Dterm A command line anywhere and everywhere 这是可在任何目录下直接用全局快捷键直接调出命令输入框的小工具,非常好用 作 ...

  5. gitlab 安装报错:Could not find modernizr-2.6.2 in any of the sources

      2014-04-30 15:27:44 标签:gitlab 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://davidbj.b ...

  6. ImageView 会盖掉ScrollView的OnTouchListener,监听Activity的手势

    当Activity的高度不够滑动的时候,ImageView会盖掉ScrollView的OnTouchListener监听. 这个时候须要设置Activity的(或者想直接监听Activity的手势也能 ...

  7. JFinal开发web项目出现故障小记

    导读 作为中国优秀的开源项目之中的一个JFinal有着极速开发的优点,是中小型应用开发的首选.在导师的建议下.我使用了JFinal来开发一个Java服务端应用,官方教程非常easy.就几十页(当然是中 ...

  8. T-SQL变量

    T-SQL中变量分为全局变量和局部变量,分别使用@@和@前缀. 全局变量 常用的全局变量有@@VERSION .@@IDENTITY.@@ERROR.@@ROWCOUNT 用法 select @@VE ...

  9. asp.net 使用HttpModule记录全局错误

    以前使用Global.asax记录全局的错误日志觉得挺好用,但是如果一个解决方案下有N多个项目,每个下边都需要加一个并且代码都还是重复的,终于有一天无法再忍受这种模式,考虑到HttpModule,直接 ...

  10. ACCESS DLL加载错误

    如今还在用ACCESS 2003,太懒没办法,升到2010变化太大了,做个Access的转版挺麻烦的.况且大家都在使用2003,也就懒得搞了. 但问题是office 2003已经out了,(Offic ...