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. c#使用正则表达式处理字符串

    正则表达式可以灵活而高效的处理文本,可以通过匹配快速分析大量的文本找到特定的字符串. 可以验证字符串是否符合某种预定义的格式,可以提取,编辑,替换或删除文本子字符串. 现在如下特定的字符串: stri ...

  2. python 提取目录中特定类型的文件

    python使用‘os’和‘re’模块提取目录中特定类型的文件,这两个模都是安装python自带的,所以不需要安装. 思路: 使用os库lilstdir获取文件夹中的所有文件名,然后带上文件夹路径组合 ...

  3. CDN详解

    一.定义 背景: 当下的互联网应用都包含大量的静态内容,但静态内容以及一些准动态内容又是最耗费带宽的,特别是针对全国甚至全世界的大型网站,如果这些请求都指向主站的服务器的话,不仅是主站服务器受不了,单 ...

  4. mysql 模糊查询like小结

    以不完整的条件进行查询 因为条件是模糊的 所以叫模糊查询,可以对有相同信息的数据快速归类 . like  运算符:可以很好的通过%和-两种通配符对数据进行筛选查询 %(所有)放在条件前中后.可查询包含 ...

  5. java sql: PrepareStatement

    参见菜鸟教程:JDBC 使用说明 增删改查: public class DbUtil { public static final String URL = "jdbc:mysql://loc ...

  6. 修改ActiveMQ的内存大小

    有时我们需要修改ActiveMQ的内存大小,防止内存溢出! 修改配置文件下-Xmx参数然后重启mq即可: /fs01/apache-activemq-5.15.0/bin/env ACTIVEMQ_O ...

  7. 打造kubernetes 高可用集群(nginx+keepalived)

    一.添加master 部署高可用k8s架构 1.拷贝/opt/kubernetes目录到新的master上(注意如果新机上部署了etcd要排除掉) scp -r /opt/kubernetes/ ro ...

  8. WIN8输入法的问题

    在win8下输入法的添加和删除,使用第三方的软件很难处理好,而且容易造成系统的不稳定.比如搜狗输入法有个输入法管理器. 正确的做法: 1.Win+C打开侧边栏,点击 设置,选择“更改电脑设置” 这个选 ...

  9. 隐藏按钮button

    <td> <input id="del" type="button" value="删除" onclick="u ...

  10. Docker——概念学习

    百度百科概念: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全 ...