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. linux设置网卡速率

    ethtool # ethtool ethX //查询ethX网口基本设置 # ethtool –h //显示ethtool的命令帮助(help) # ethtool –i ethX //查询ethX ...

  2. c#测量字体宽度

    Bitmap image_size = * count, f.Height);//初始化大小 Graphics size_g = Graphics.FromImage(image_size); Siz ...

  3. oracle批量操作

    https://stackoverflow.com/questions/39576/best-way-to-do-multi-row-insert-in-oracle 1 批量insert 方式一: ...

  4. Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)

    就好像演电影一样,播放实现准备好的图片,来实现动画效果. 逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可. androi ...

  5. VLAN实验2:配置Trunk接口

    实验环境公司规模较大200多个员工.内部网络是一个较大的局域网,有两台交换机S1和S2来负责员工网络的接入,接入交换机之间通过汇聚交换机S3相连.公司通过划分VLAN来隔离广播域,由于员工较多,同部门 ...

  6. Android AIDL使用详解_Android IPC 机制详解

    一.概述 AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来 ...

  7. abp vNext微服务框架分析

    本文转载自:https://www.cnblogs.com/william-xu/p/11245738.html abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了 ...

  8. centos7单用户模式

    1 - 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 如果用的是kvm做了c ...

  9. 用js刷剑指offer(把数组排成最小的数)

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路 对ve ...

  10. [BeiJing2010组队]次小生成树 Tree

    1977: [BeiJing2010组队]次小生成树 Tree Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 5168  Solved: 1668[S ...