OAuth2 客户端凭据

OAuth2 client credentials

所以现在我正在我的服务器中实施 oauth2,但我只想支持 client_credentials 授权。问题是,node-oauth2-server 说支持这种类型的授权,我几乎调试了整个库,有些东西对我来说没有意义。

据我了解,client_credentials 赠款应该是这样的:

  1. 应该发出内部请求为客户生成 client_idclient_secret,这是我们唯一一次获得 client_secret,我们应该将其提供给我们的客户
  2. client_id 应该与任何额外数据(比如关联的帐户 ID 或类似的东西)和 client_secret 的散列一起存储在数据库中,以便我们稍后验证它
  3. 客户端向服务器发送请求包括client_idclient_secret
  4. 然后服务器应该根据请求生成一个访问令牌(在我的例子中我将使用 JWT)和 return。我们还需要将此令牌存储在数据库中,以便我们可以在需要时撤销权限
  5. 客户端必须在以后请求访问服务器资源时使用此访问令牌,如果令牌有效(未过期、未丢失权限等),服务器将验证每个请求

我可能错了,但这就是我需要的,这正是 C# Identity does and it is explained here

就我而言,我正在使用 nodejs。实际上是一个 NestJS 项目,所以我尝试使用 this lib,它基本上是 node-oauth2-server 的包装器,如果你看一下 node-oauth2-server,看起来它们只支持授权码,这是因为 AuthorizeHandler.handle() 始终是 return 授权代码,而 AuthenticateHandler.handle() 始终需要授权代码和 return 访问令牌。基本上我需要调用 AuthenticateHandler.handle() 但不是检查授权码,我必须通过并检查 client_idclient_secret.

这是最近的一期,与我的问题完全相同:https://github.com/oauthjs/node-oauth2-server/issues/552

所以,首先,我想确认我是对的,这个库的实现方式很糟糕,其次,是否还有其他内置 client_credentials 的 nodejs 库?

正如您提到的,它目前不支持 client_credentials 授权,您仍然可以在内部使用授权代码流授权类型来获取访问令牌。

  • 准备client_credentials授权类型请求并提交给服务器。
  • 将此请求映射到授权代码流 authorization code 流程需要属性。
  • 向授权服务器提交请求。
  • 从响应中获取代码。
  • 使用 oauth code 准备令牌交换调用。
  • 获取 access_token.
  • Return 响应 client_credentials 调用的令牌。