JSON Web Token (JWT) 简介

Date Modified Category web Tags jwt

JSON Web Token (JWT) 是一种基于 token 的认证方案。

JSON Web Token 的结构

一个 JWT token 看起来是这样的:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxMzEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_IWuA5MaMo

可以简化为下面这样的结构:

base64url_encode(Header) + '.' + base64url_encode(Claims) + '.' + base64url_encode(Signature)
more ...

在 python 中使用 str.strip 方法时需要注意的地方

Date Category python

首先问大家一个问题:你觉得下面代码的输出会是什么?

print '12345-abc-12345-defg-54321'.strip('12345')

我猜有些同学的答案会是: -abc-12345-defg-54321 ,实际的结果是:

>>> print '12345-abc-12345-defg-54321'.strip('12345')
-abc-12345-defg-

为什么不是 -abc-12345-defg-54321 呢?我们先来看一下 str.strip 的文档就知道了:

S.strip([chars]) -> string or unicode

Return a copy of the string S with leading and trailing
whitespace removed.
If chars is given and not None, remove characters in ...
more ...

微信开发过程中遇到的问题

JSSDK

invalid signature, 排查:

前端:

  • url 参数动态获取

  • 注意参数大小写:

    appId: '',         //  I 大写
    timestamp: 134xxx, // 全小写, 必须与后端签名时 timestamp 的值一致
    nonceStr: '',      //  ** 尤其注意 S 是大写 **, 必须与后端签名时 noncestr 的值一致
    

后端:

  • 确保 jsapi_ticket 未过期

  • 确认参与签名的参数,注意大小写:

    noncestr        // 全小写,** 尤其注意 s 是小写 **
    jsapi_ticket    // 全小写
    timestamp       // 全小写
    url             // 小写,必须是前端动态获取
    
  • 签名算法 * 是否按字段名的ASCII 码从小到大排序 * 使用 sha1 签名

微信支付 商户签名错误 ...

more ...

让我们一起来构建一个 Web 服务器(二)

本文译自:http://ruslanspivak.com/lsbaws-part2/

还记得吗?在 第一部分 我向你问了一个问题:”如何在你新鲜出炉的 Web 服务器上不做任何修改的就运行 Django 应用,Flask 应用, Pyramid 应用?“ 往下读就可以找到答案。

在过去,当你选择的 Python Web 框架会限制你所能选择的 Web 服务器, 如果那个框架和服务器被设计的可以一起工作的话,那就皆大欢喜了:

Server Framework Fit

但是,当你尝试把一个服务器和一个框架一起使用的时候可能会(可能你已经)面临它们被设计为不兼容的情况:

Server Framework Clash

一般来说你必须使用能够一起工作的组件而不仅仅是你想使用的组件。

那么,你如何确保你能够在你的 Web 服务器上运行多个 Web 框架,并且不需要修改 Web 服务器或 Web 框架的现有的代码呢? 解决这个问题的答案就是 Python Web Server Gateway Interface ...

more ...

让我们一起来构建一个 Web 服务器(一)

本文译自:http://ruslanspivak.com/lsbaws-part1/

有一天出去散步的时候,一个女人来到一处工地上,她看到有三个男人在工作。 她问第一个人,“你在做什么?“,第一个男人对这个问题感到非常的厌烦, 他大声的说到”你没看到我正在砌砖吗?“女人对这个答案不大满意, 她又去问第二个男人他在做什么。 第二个男人回答道,”我正在建造一面砖墙。” 然后,他把注意力转向了第一个男人,他说道, “嘿,你只完成墙的尾部。你需要把最后那块砖拿掉。” 仍旧不满意这个答案,她又问第三个男人他在做什么。 这个男人边望着天边对他说, ”我正在建造世界上最大的教堂。“ 当他站在这里仰望着天空的时候,另外两个男人开始争吵应该怎么放砖。 这个男人转向前面的两个男人并说道, “嘿,伙计们,别担心那块砖了。那只是一块内墙, 它将会被涂平没人会看到那块砖。 只需移动到另一层。” [1]

这则故事的寓意是当你了解了整个系统并且理解了不同的部分是如何组合在一起的时候(砖,墙,教堂), 你就可以更快的识别和解决问题(不正确的砖)。

对于从零开始创建我们自己的 Web server 来说需要做些什么呢?

我相信要成为一个优秀的开发者你必须更好的理解你日常使用的基础软件系统,包括编程语言,编译器 ...

more ...