前言
在Auth的过程,很常会看到Basic、Bearer 型态的Token,而是用的场景不太一样。 Basic用在存取一个网站、网域的时候,Bearer则是用于存取Protect Resource的时候。
Token 怎么使用?
一般来说是在HEADER中使用 Authorization 的并带入存取的Token,如Basic、Bearer等type的Token。
Authorization Header Example
# Unauthorized Response
GET / HTTP/1.1
# Authorized Query
GET / HTTP/1.1
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Basic Token
作为HTTP最基本的认证方式,使用明码的方式进行传输password、user_id。 设计面并未考虑到TLS认证,以明码的方式传送password、user_id。
一般来说,在存取资Server的时候,需要预先带入Token,然而若未能成功验证通过时,Response 则会回应相关的资讯,带有WWW-Authenticate HEADER,并带有Realm (Protection Space)资讯。
Key words:
- Realm(Protection Space): Token有效的网域。
- charset: 用于设定schema的编码,只能允许utf-8一种
Bearer Token
是以HTTP 1.1 TLS下去定义的Token,因此使用Bearer必须具备TLS环境。 延续使用Basic Token 的WWW-Authenticate、Authorization HEADER,而proxy authentication不延续使用。
使用Token的方式:
使用 Authorization HEADER:
Ex: Authorization: Bearer QWxhZGRpbjpvcGVuIHNlc2FtZQ==
使用 Form Body:
使用时不建议将Token加入Body,并使用 GET之外的HTTP verbs (POST、DELETE、PUT)
HEADER: Content-Type: "application/x-www-form-urlencoded"
直接使用在 URI :
一般来说不会使用这种方法,除非是Authorization header不支援,或者protect resource支援该方法。
Ex: GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Token Response Error
使用Token时,当HTTP Response Status code 为200时代表成功,然而当失败的时候则会出现4XX的Status code。
Basic Token: 当授权为「不」通过时,回传401 code并告知哪个Protect Scope 错误。
- Basic Token Error Example
HTTP/1.1 401 Unauthorized
Date: Mon, 04 Feb 2014 16:50:53 GMT
WWW-Authenticate: Basic realm="WallyWorld"
Bearer Token: 当授权为「不」通过时,回传400、401、403 code,并根据状况回传对应的错误。
Error Type | 说明 |
---|---|
invalid_request | Response 400 error code,表示Request 缺少参数或者多了一些参数等错误 |
invalid_token | Response 401 error code,表示Token 错误,通过不了认证 |
invalid_scope | Response 403 error code,表示Token无权存取该Protect Resource |
- Bearer Token Error Example
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
error="invalid_token",
error_description="The access token expired"
总结
Basic Token 主要还是使用在网域上的防护(Realm),而Bearer则是针对protect resource的存取,主要还是使用在Auth 2.0 上头,且一定要在TLS环境(HTTPS)使用
参考资料
[1] The 'Basic' HTTP Authentication Scheme
[2] The OAuth 2.0 Authorization Framework: Bearer Token Usage
[3] Basic Authentication
讲得挺清晰的,好评