接口认证方式:Bear Token

由于HTTP协议是开放的,能够任人调用。因此,若是接口不但愿被随意调用,就须要作访问权限的控制,认证是好的用户,才容许调用API。html

Bearer Token(Token 令牌)web

定义:为了验证使用者的身份,须要客户端向服务器端提供一个可靠的验证信息,称为Token,这个token一般由Json数据格式组成,经过hash散列算法生成一个字符串,因此称为Json Web Token(Json表示令牌的原始值是一个Json格式的数据,web表示是在互联网传播的,token表示令牌,简称JWT)算法

Bearer验证也属于HTTP协议标准验证,它随着OAuth协议而开始流行。Bearer验证中的凭证称为BEARER_TOKEN,或者是access_token,它的颁发和验证彻底由咱们本身的应用程序来控制,而不依赖于系统和Web服务器,Bearer验证的标准请求方式以下:json

Authorization:Bearer [BEARER_TOKEN]

Bearer认证,其核心即是BEARER_TOKEN,而最流行的Token编码方式即是:JSON WEB TOKEN(JWT)。Json Web Token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明通常被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也能够增长一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。api

jwt主要包含如下三个内容:跨域

  1. 头部 Header
  2. 载荷 Payload
  3. 签名 Signature

头部(Header)安全

{
  "alg": "HS256",
  "typ": "JWT"
}

alg是所使用的hash算法,如:SHA25六、HMAC SHA256或RSA,HMAC(Hash Message Authentication Code,散列消息鉴别码);typ是Token的类型,在这里就是:JWT。服务器

而后使用Base64Url编码成第一部分网络

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.<second part>.<third part>

载荷(Payload)app

这一部分是JWT主要的信息存储部分,其中包含了许多种的声明(Claims)。

Claims的实体通常包含用户和一些元数据,这些Claims分红三种类型:

  1. reserved claims:预约义的一些声明,并非强制的可是推荐,它们包括 iss (issuer), exp (expiration time),sub (subject),aud(audience) 等(这里都使用三个字母的缘由是保证 JWT 的紧凑)。
  2. public claims: 公有声明,这个部分能够随便定义,可是要注意和 IANA JSON Web Token 冲突。
  3. private claims: 私有声明,这个部分是共享被认定信息中自定义部分。

一个简单的Payload能够是这样子的:

{
   "user_name": "admin", 
   "scope": [
       "read","write","del"
   ], 
   "organization": "admin", 
   "exp": 1531975621, 
   "authorities": [
       "ADMIN"
   ], 
   "jti": "23408d38-8cdc-4460-beac-24c76dc7629a", 
   "client_id": "webapp"
}

这部分一样使用Base64Url编码成第二部分

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.<third part>

 

签名(Signature)

Signature是用来验证发送者的JWT的同时也能确保在期间不被篡改。

签名哈希部分是对上面两部分数据签名,经过指定的算法生成哈希,以确保数据不会被篡改。
首先,须要指定一个密码(secret)。该密码仅仅为保存在服务器中,而且不能向用户公开。而后,使用标头中指定的签名算法(默认状况下为HMAC SHA256)根据如下公式生成签名。

使用Base64编码后的header和payload以及一个秘钥,使用header中指定签名算法进行签名。

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

结果:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-19

1.令牌的好处:避免在使用中不断的输入帐号和密码,比较安全

2.若是要测试带token的接口,首先要进行登陆,登陆成功会有个token信息,向api接口发送请求的时候必须带上这个token,故须要作2次请求(1,登陆,拿到token 2,正式对接口进行测试)

3.注意点:

1)token通常有时间限制。测试前须要跟开发确认token能够用多久,何时算token失效

2)token放在哪儿,怎么传回去,须要有开发文档,或者咨询开发,登陆成功返回的token须要了解从什么地方获取(能够经过录制进行查看)

JWT的工做过程

客户端接收服务器返回的JWT,将其存储在Cookie或localStorage中。

此后,客户端将在与服务器交互中都会带JWT。若是将它存储在Cookie中,就能够自动发送,可是不会跨域,所以通常是将它放入HTTP请求的Header Authorization字段中。

Authorization: Bearer JWT_TOKEN

当跨域时,也能够将JWT被放置于POST请求的数据主体中。

使用JWT的好处
  1. 通用:由于json的通用性,因此JWT是能够进行跨语言支持的,像JAVA,JavaScript,NodeJS,PHP等不少语言均可以使用。
  2. 紧凑:JWT的构成很是简单,字节占用很小,能够经过 GET、POST 等放在 HTTP 的 header 中,很是便于传输。
  3. 扩展:JWT是自我包涵的,包含了必要的全部信息,不须要在服务端保存会话信息, 很是易于应用的扩展。
相关文章
相关标签/搜索