OAuth2 客户端凭据
OAuth2 client credentials
所以现在我正在我的服务器中实施 oauth2,但我只想支持 client_credentials
授权。问题是,node-oauth2-server 说支持这种类型的授权,我几乎调试了整个库,有些东西对我来说没有意义。
据我了解,client_credentials
赠款应该是这样的:
- 应该发出内部请求为客户生成
client_id
和 client_secret
,这是我们唯一一次获得 client_secret
,我们应该将其提供给我们的客户
client_id
应该与任何额外数据(比如关联的帐户 ID 或类似的东西)和 client_secret
的散列一起存储在数据库中,以便我们稍后验证它
- 客户端向服务器发送请求包括
client_id
和client_secret
- 然后服务器应该根据请求生成一个访问令牌(在我的例子中我将使用 JWT)和 return。我们还需要将此令牌存储在数据库中,以便我们可以在需要时撤销权限
- 客户端必须在以后请求访问服务器资源时使用此访问令牌,如果令牌有效(未过期、未丢失权限等),服务器将验证每个请求
我可能错了,但这就是我需要的,这正是 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_id
和 client_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 调用的令牌。
所以现在我正在我的服务器中实施 oauth2,但我只想支持 client_credentials
授权。问题是,node-oauth2-server 说支持这种类型的授权,我几乎调试了整个库,有些东西对我来说没有意义。
据我了解,client_credentials
赠款应该是这样的:
- 应该发出内部请求为客户生成
client_id
和client_secret
,这是我们唯一一次获得client_secret
,我们应该将其提供给我们的客户 client_id
应该与任何额外数据(比如关联的帐户 ID 或类似的东西)和client_secret
的散列一起存储在数据库中,以便我们稍后验证它- 客户端向服务器发送请求包括
client_id
和client_secret
- 然后服务器应该根据请求生成一个访问令牌(在我的例子中我将使用 JWT)和 return。我们还需要将此令牌存储在数据库中,以便我们可以在需要时撤销权限
- 客户端必须在以后请求访问服务器资源时使用此访问令牌,如果令牌有效(未过期、未丢失权限等),服务器将验证每个请求
我可能错了,但这就是我需要的,这正是 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_id
和 client_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 调用的令牌。