在 OAuth 2.0 资源所有者密码凭据授权期间向公共客户端提供刷新令牌是否可以?

Ole*_*sii 5 rest oauth-2.0 refresh-token

我的场景

我有以下软件片段/部分:

  • 具有 Windows 服务的专用服务器,该服务通过 OAuth 2.0 授权公开 REST API。
  • 类型 1 客户端:使用 REST API 的不同服务器上的服务。只有组织管理员才能访问这些服务器。
  • 类型 2 客户端:调用 REST API 的桌面应用程序。

根据 RFC 6749,类型 1 客户端是机密的,类型 2 客户端是公开的。

已决定在第一个版本中对两种类型的客户端使用资源所有者密码凭据授权。对于类型 1 客户端来说,这似乎没问题,因为它们能够维护其凭据的机密性,并且无法使用授权代码授予(没有交互式用户)。

授权详情

  • 授权端点将访问令牌和刷新令牌返回给类型 1 和类型 2 客户端。
  • 所有客户端(类型 1 和类型 2)都可以使用刷新令牌来获取新的访问和刷新令牌。

问题/困境/问题

公共客户没有秘密。这意味着如果任何人获得刷新令牌和客户端 ID(最后一个不安全),那么他可以使用它来获取新的访问令牌并使用 REST API。

  1. 从安全角度来看,可以为类型 2 客户端(公共)生成刷新令牌吗?或者,如果使用资源所有者密码凭据授权授予,我不得返回刷新令牌以及类型 2 客户端的访问令牌。
  2. 2 类客户,他们真的是公开的吗?我可以将桌面客户端视为机密并为其生成机密吗?桌面应用程序将从配置文件中读取客户端机密(将使用 AES 256 加密),该文件由管理员分发给组织网络内的用户计算机?

小智 5

我知道这已经晚了,但是,是的,您可以向公共客户发行刷新令牌。

RFC 第 10.4 节这样说:

授权服务器可以向 Web 应用程序颁发刷新令牌

客户端和本机应用程序客户端。

这存在许多安全隐患,因此您应该仔细阅读,但规范中并没有完全禁止这样做。