http json token

https使用证书来保证链接的安全,是目前最为流行的做法。

另一种保证HTTP 函数的安全,就是http json token,只有TOKEN验证通过,才能调用方法(一般指通过HTTP GET/POST调用的REST API)。

1)客户端调用REST API的时候,要增加TOKEN参数及值

演示使用HS256,只有公钥,没有私钥

  

procedure TForm1.Button5Click(Sender: TObject);
//HTTP TOKEN
begin
const secret: string = 'ynMiddleWare(cross)'; //公钥
var LToken: TJWT := TJWT.Create;
LToken.Claims.Subject := secret; //主题
LToken.Claims.IssuedAt := Now; //签发时间
LToken.Claims.Expiration := Now + 1; //超时
LToken.Claims.Issuer := secret; //签发人
var LAlg: TJOSEAlgorithmId := TJOSEAlgorithmId.HS256; //hs256
var s: string := TJOSE.SerializeCompact(secret, LAlg, LToken);
var url: string := 'http://192.168.1.5:1122/restquerytoken?accountno=1&token=' + s + '&sql=' + TNetEncoding.URL.Encode('select * from tunit');
s := IdHTTP1.Get(url);
Memo1.Lines.Add(s);
LToken.Free;
end;

  2)服务端处理

服务端验证TOKEN的时候,主题、超时、签发人。。。这些都是验证可选项,最简验证:可以只验证密钥。

当然,验证的项越多,越安全。验证TOKEN不通过,不会执行函数的。

function VerifyToken(const request: string): string;
begin
const secret: string = 'ynMiddleWare(cross)'; //公钥
var LToken: TJWT := TJOSE.Verify(secret, ParamValue(request, 'token'));
if LToken.Verified then
begin
//主题、超时。。。等项,都是可选验证项,验证项越多,越安全
// if LToken.Claims.Subject <> '主题' then //主题
// begin
// Result := '{"return":"false","error":"Subject error"}';
// exit;
// end;
// if LToken.Claims.Expiration < Now then //超时
// begin
// Result := '{"return":"false","error":"Expiration time passed"}';
// Exit;
// end;
// if LToken.Claims.Issuer <> '签发人' then //签发人
// begin
// Result := '{"return":"false","error":"Issuer error"}';
// Exit;
// end;
Result := '{"return":"true"}';
end
else
Result := '{"return":"false","error":"Verify error"}';
LToken.Free;
end;

  

  FHttpServer.Get('/restquerytoken',
procedure(ARequest: ICrossHttpRequest; AResponse: ICrossHttpResponse)
begin
var s: string := VerifyToken(ARequest.RawPathAndParams); //验证token
if sametext('{"return":"true"}', s) then //验证通过
begin
var Pool: TUnidacPool := GetDBPool(ParamValue(ARequest.RawPathAndParams, 'accountno'));
var dm: TUnidac := Pool.lock;
AResponse.send(dm.RestQuery(ARequest.RawPathAndParams));
Pool.unlock(dm);
end
else
AResponse.send(s); //返回错误信息
end);

  

http json token的更多相关文章

  1. Go实战--golang中使用JWT(JSON Web Token)

    http://blog.csdn.net/wangshubo1989/article/details/74529333 之前写过关于golang中如何使用cookie的博客: 实战–go中使用cook ...

  2. 使用json web token

    由来 做了这么长时间的web开发,从JAVA EE中的jsf,spring,hibernate框架,到spring web MVC,到用php框架thinkPHP,到现在的nodejs,我自己的看法是 ...

  3. Go语言入门篇-jwt(json web token)权限验证

    一.token.cookie.session的区别 1.cookie Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie. 内存Cookie由浏览器维护, ...

  4. pyhton读取json格式的气象数据

    原文关于读取pm25.in气象数据的pyhton方法,以及浅析python json的应用 以pm25.in网站数据为例. 1.方法介绍 首先感谢pm25.in提供了优质的空气污染数据,为他们的辛勤劳 ...

  5. 转载:关于 Token,你应该知道的十件事

    关于 Token,你应该知道的十件事 原文地址:http://alvinzhu.me/blog/2014/08/26/10-things-you-should-know-about-tokens/ 原 ...

  6. ajax传递json数据,springmvc后台就收json数据

    1.ajax数据的封装 var json = {"token":token};//封装json数据 $.ajax({ url:'', data:JSON.stringify(jso ...

  7. nodejs微信开发获取token,ticket-1

    /* jshint -W079 */ /* jshint -W020 */ "use strict"; var _ = require("lodash"); v ...

  8. 使用httperrequest,模拟发送及接收Json请求

    使用httpreques\Json-Handle\tcpdump\wireshark工具进行,抓取手机访问网络的包,分析request及response请求,通过httprequester来实现模拟发 ...

  9. Spring统一返回Json工具类,带分页信息

    前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...

随机推荐

  1. mkimage命令

    # mkimage Usage: mkimage -l image -l ==> list image header information mkimage [-x] -A arch -O os ...

  2. PS1变量设置

    \d :代表日期,格式为weekday month date \H :完整的主机名 \h :主机的第一个名字 \t :显示时间为24小时格式(HH:MM:SS) \T :显示时间为12小时格式 \A ...

  3. 修改网口速度mii-tool和ethtool

    mii-tool # mii-tool -F 100baseTx-FD media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10base ...

  4. iOS静态库相关-封装lib

    来源:http://blog.csdn.net/zsomsom/article/details/9163635 Library介绍 基本知识 在实际的编程过程中,通常会把一些公用函数制成函数库,供其它 ...

  5. 美化shell

    Linux终端提示符颜色美化: (一)大致步骤:vim ~/.bashrc中设置PS1的值.保存后执行生效:source ~/.bashrc (二)PS1的值推荐:推荐1多色显示:用户白色:全路径(\ ...

  6. 【mysql】centos7下mysql的安装以及基本操作

    centos7使用的MariaDB,替代了早期版本默认的MySQL.MariaDB是MySQL的一个分支,由开源社区维护,采用GPL授权许可,且MariaDB完全贱人MySQL. 检查centos7下 ...

  7. Linux 中 /proc/kcore为啥如此之大

    What Is /proc/kcore?None of the files in /proc are really there--they're all, "pretend," f ...

  8. 通过visual studio制作类库的文档

    java的集成开发工具,可以导出jar的文档. visual studio 也可以生成类库的文档,邮件项目属性,生成,输出下,选择XML文档文件.然后生成项目,就会再bin下面生成一个xml文件. 将 ...

  9. JQuery的入门(二)

    Jquery的遍历 jQuery对象本身就是数组对象,通过jquery选择器获得的都是满足该选择器条件的元素对象的集合体,因此在常常需要对jquery对象进行遍历.这里有三种遍历Jquery的方法. ...

  10. *DataSet序列化,这段代码研究

    DataSet序列化,这段代码研究研究.学习学习. using System; using System.Collections.Generic; using System.Linq; using S ...