OAuth 2.0流程如何工作node-oauth2-server

Man*_*h V 3 oauth node.js oauth-2.0

使用https://github.com/thomseddon/node-oauth2-server在NodeJS中实现OAuth服务器时

我正在尝试了解OAuth 2.0的流程

不知怎的,我在这个npm包实现方面取得了成功,但我怀疑,出了点问题.

我会解释我是如何成功的.

第一次请求:

POST: http://localhost:3000/oauth/token
grant_type=password
client_id=1011
client_secret=somesecret
username=admin
password=admin
Run Code Online (Sandbox Code Playgroud)

第一回应:

{
token_type: "bearer"
access_token: "7f5261011fb0f84a4e193889fff4b7478f2a4cb2"
expires_in: 3600
refresh_token: "da83de41966979ced65b3841e1758335a811c0c2"
}
Run Code Online (Sandbox Code Playgroud)

获得访问令牌后,我正在发送另一个http调用

第二次请求:

GET http://localhost:3000/secret
Authorization: Bearer 7f5261011fb0f84a4e193889fff4b7478f2a4cb2
Run Code Online (Sandbox Code Playgroud)

第二回应:

{"data":"Secret area accessible"}
Run Code Online (Sandbox Code Playgroud)

但在这里我完全感到困惑

问题1.缺少Authorization_code部分

问题2.在第一次调用时我需要发送client_secret和user_password - 如果我发送两个意味着oauth客户端向用户公开秘密(浏览器)或者用户向OAuth客户端提供密码.

如果整个OAuth 2.0的任何请求/响应模式如下,请与我分享

a. browser -> oauth server POST /oauth/authorize?client_id,username,password
b. USER GRANTS PERMISSION
c. browser -> oauth server RESPONSE auth_code
d. browser -> oauth client POST auth_code
e. oauth_client -> oauth server POST auth_code
e. oauth server -> oauth_client  RESPONSE access_token
f. oauth_client  -> resource_server POST /resource?access_token (Question 3. But here how resource server validates access token is valid or not )
Run Code Online (Sandbox Code Playgroud)

Han*_* Z. 5

OAuth 2.0定义了几种通过所谓的"授权"获取访问令牌的方法.您的请求显示您当前正在使用资源所有者密码凭据授权,请参阅:https://tools.ietf.org/html/rfc6749#section-1.3.3.该授权确实向客户端公开了用户名/密码,这就是为什么它违背了OAuth 2.0的大部分目的,仅用于迁移目的,请参阅:https://tools.ietf.org/html/rfc6749#section-10.7

授权代码授权是一种单独的授权类型,通过该授权类型,用户可以使用浏览器重定向到授权端点,以便客户端不在用户身份验证过程之外.您似乎在a.-f中描述的流程中引用了它.由于这是一种不同的授权类型,因此您不会将"授权代码"视为资源所有者密码凭据授予的一部分.

在正确的授权代码授权流程中,a.将是一个重定向而不是POST,如:a. browser -> oauth server Redirect /oauth/authorize?client_id,response_type=code