前后端分离开发,HTTP API 认证授权术

Posted 江南一点雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前后端分离开发,HTTP API 认证授权术相关的知识,希望对你有一定的参考价值。

文章出处:https://coolshell.cn

HTTP Basic

其技术原理如下:

Digest Access

 WWW-Authenticate: Digest realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
GET /dir/index.html HTTP/1.0
Host: localhost
Authorization: Digest username="Mufasa",
realm="testrealm@host.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="%2Fcoolshell%2Fadmin",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"

App Secret Key + HMAC

前后端分离开发,HTTP API 认证授权术

前后端分离开发,HTTP API 认证授权术

Authorization: AWS4-HMAC-SHA256
Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request,
SignedHeaders=content-type;host;x-amz-date,
Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7

JWT – JSON Web Tokens

    • 认证服务器还会生成一个 Secret Key(密钥)
    • 对JWT Header和 JWT Payload 分别求 Base64。在 Payload 可能包括了用户的抽象 ID 和的过期时间。
    • 用密钥对 JWT 签名 HMAC-SHA256(SecertKey, Base64UrlEncode(JWT-Header)+'.'+Base64UrlEncode(JWT-Payload));

当应用服务器收到请求后:

OAuth 1.0

这个协义有三个阶段:

整个授权过程是这样的:

前后端分离开发,HTTP API 认证授权术

下图是整个签名的示意图:

前后端分离开发,HTTP API 认证授权术

OAuth 2.0

Authorization Code Flow

前后端分离开发,HTTP API 认证授权术

下面是对这个流程的一个细节上的解释:

https://login.authorization-server.com/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Fexample-client.com%2Fcallback%2F
&scope=read
&state=xcoiv98CoolShell3kch

其中:

2)

https://example-client.com/callback?
code=Yzk5ZDczMzRlNDEwYlrEqdFSBzjqfTG
&state=xcoiv98CoolShell3kch

POST /oauth/token HTTP/1.1
Host: authorization-server.com

code=Yzk5ZDczMzRlNDEwYlrEqdFSBzjqfTG
&grant_type=code
&redirect_uri=https%3A%2F%2Fexample-client.com%2Fcallback%2F
&client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&client_secret=JqQX2PNo9bpM0uEihUPzyrh

{
"access_token": "iJKV1QiLCJhbGciOiJSUzI1NiI",
"refresh_token": "1KaPlrEqdFSBzjqfTGAMxZGU",
"token_type": "bearer",
"expires": 3600,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciO.eyJhdWQiOiIyZDRkM..."
}

6)

GET /v1/user/pictures
Host: https://example.resource.com

Authorization: Bearer iJKV1QiLCJhbGciOiJSUzI1NiI

Client Credential Flow

前后端分离开发,HTTP API 认证授权术

请求示例

POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=czZCaGRSa3F0Mzpn
&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw

返回示例

{
"access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk",
"scope":"create"
}

前后端分离开发,HTTP API 认证授权术

小结

两个概念和三个术语

明白一些初衷

相关的注意事项

前后端分离开发,HTTP API 认证授权术

1、

2、

3、


喜欢就点个"在看"呗^_^

以上是关于前后端分离开发,HTTP API 认证授权术的主要内容,如果未能解决你的问题,请参考以下文章

前后端身份验证

谈谈前后端分离及认证选择

前后端分离,认证框架分析

前后端分离:RESTful API和HTTP动词

前后端分离之JWT用户认证

前后端分离:基于JWT用户认证分析