资讯专栏INFORMATION COLUMN

JSON Web Token 简介

fevin / 2930人阅读

摘要:在驱动开发的今天,针对的验证授权越来越重要,这是保证数据安全第一步。部分要创建签名部分,必须采用已编码的已编码的密匙签名算法。

在API驱动开发的今天,针对API的验证授权越来越重要,这是保证数据安全第一步。基于token授权的机制随着实践的不断进步也推陈出新,其中较为人知的有:

HTTP Basic

API Key

OAuth2

JSON Web Token(JWT)

他们都有各自不同适用场景,此处仅对JWT进行抛砖引玉简单介绍。

JWT是Internet Engineering Task Force(IETF)制定的开放标准,归档为RFC 7519

JWT两大优点:

小巧:由于尺寸较小,JWT可以通过URL,POST参数或HTTP标头内发送。另外,尺寸越小意味着传输速度越快。

自包含:Token的载荷部分可以包含有关用户的所有必需信息,避免了多次查询数据库的需要

JWT基本结构

Header(头部)

Payload(荷载)

Signature(签名)

jwt最终形成的字符串结构如:xxxxx.yyyyy.zzzzz,每一部分都是基于base64url编码的值。

Header部分

通常情况下Header部分会包含两个值,typ表示token类型,alg表示hash算法,如:

{
    "typ": "JWT",
    "alg": "HS256"
}
Payload部分

这部分是包含声明数据的有效荷载,共有有三种声明数据:Registered、Public、Private,所有的声明数据都不是必须的。

Registered

此种类型的声明是预先定义的,每一个都有特定的含义。此种类型的声明往往是推荐使用的,因为他们让JWT的数据更合理。目前已经注册的类型有:

iss:issuer的简写,表示发行JWT的主体方

sub:subject的简写,表示该JWT的主题,该值需在上下文中唯一或全局唯一

aud:audience的简写,表示该JWT的接收人

exp:expiration的简写,表示过期时间,其值必须为Unix时间戳

nbf:not before的简写,表示JWT生效时间,其值必须为Unix时间戳

iat:issued at的简写,表示JWT的发行时间

jti:JWT ID的简写,表示JWT的唯一标识

Public

此种类型的声明可由JWT的使用者随意定义,但通常情况下为了避免冲突,我们需要使用IANA JSON Web Token Registry中已注册的,或者被定义为包含抗冲突命名空间的URI。

Private

此种类型的声明可由JWT的使用者随意定义,但通常情况下我们需要使用Registered和Public之外的。

{
    "iss": "api",
    "exp": 1300819380,
    "email": "test@email.com",
    "hobby": "basketball"
}
Signature部分

要创建签名部分,必须采用已编码的Header、已编码的Payload、密匙、签名算法。

签名的计算逻辑:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

从上面的计算方法可以看出,JWT只保证数据的不可串改,不保证数据不可窥探。假如我们的secret值为‘password",那么由本篇内容中罗列的示例数据计算出的最终JWT值为:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcGkiLCJleHAiOjEzMDA4MTkzODAsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJob2JieSI6ImJhc2tldGJhbGwifQ.hKYJybV4u0Rc4oIB7l7LKbHWbKlMM1dkquq53MM5N2Q

我们可以在JWT Debugger进行验证.

JWT的使用

JWT可以通过任何方式从客户端发送到服务器,但通常在API的验证流程中使用HTTP-Bearer

Authorization: Bearer 

下图展示了完整的流程:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93470.html

相关文章

  • JWT开发工具

    摘要:简介为网络应用环境间传递声明而执行一种基于开放标准认证用户身份信息认证成功,才可获取其它资源,如用户登录最重要作用对信息防伪的原理一个由三个部分组成公共部分私有部分签名部分。 1.简介: (1.1)JWT(Json Web Token):               为网络应用环境间传递声明...

    张率功 评论0 收藏0
  • ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证

    摘要:通过这个链接打开对应的帮助文档,可以看到下列七种登录手段。上图的图例描述了部署在云平台环境上的应用是如何通过访问系统上的服务。用户完成登录操作后,一个简称为被创建,发送给,并缓存于内。将请求通过转发给。 ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档。showImg(https://...

    blastz 评论0 收藏0
  • ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证

    摘要:通过这个链接打开对应的帮助文档,可以看到下列七种登录手段。上图的图例描述了部署在云平台环境上的应用是如何通过访问系统上的服务。用户完成登录操作后,一个简称为被创建,发送给,并缓存于内。将请求通过转发给。 ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档。showImg(https://...

    yuanzhanghu 评论0 收藏0
  • NODE + JWT + Mongo(简单实现权限管理)

    摘要:此信息可以通过数字签名进行验证和信任。用途授权和安全传输信息的结构通常由两部分组成令牌的类型,即,以及正在使用的散列算法,例如或。加密的数据签名应用知道了的用途后,我们就开始针对授权来结合做简单的实现。 JWT简介 官方是这样介绍的: JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact a...

    dmlllll 评论0 收藏0
  • SAP成都研究院李三郎:SCP Application Router简介

    摘要:今天的文章来自李贝宁,成都研究院的资深程序猿和架构师。是研究院内部的教练,也是成都研究院若干内部培训课程的讲师。而李贝宁,在成都研究院三支分别使用和的开发团队里都被任命为架构师,技术的全面性不输于史大郎。 今天的文章来自李贝宁(Ben),SAP成都研究院的资深程序猿和架构师。 作为成都研究院里同时精通Java, JavaScript和ABAP这三门编程语言的数位同事之一,Ben曾经先后...

    summerpxy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<