受信任应用程序的授权代码流与资源所有者密码授予

Authorization Code flow vs. resource owner password grant for trusted applications

我在想解决这个问题时遇到了问题... 授权代码流似乎是针对第 3 方应用程序的,这就是为什么要让用户在授权服务器上向应用程序授予权限。

当用户登录时,授权服务器会打开一个会话,以便用户在使用另一个第三方应用程序时无需再次登录,但是他们可能需要授予该应用程序权限,但不提供由于与授权服务器的会话 cookie,用户名/密码。

但是,对于身份提供者提供的受信任应用程序,他们通常使用资源所有者密码授予,因为他们不想要求用户授予应用程序权限。

这带来了一个问题,因为他们不再使用授权代码流,他们无法再利用用户与授权服务器之间的会话 cookie...那么如何在这两个之间完成 SSO不同类型的流量?

如果有一种方法可以在 AuthCode 中指定受信任的应用程序,这将不再是一个问题,但这不是由规范提供的,似乎也不是在我所知道的任何 OAuth2 / OpenID 连接软件中.

第二种是与 IDP 实现一些非标准后端通信以获取会话信息...

我很想知道是否有人以其他创造性的方式解决了这个问题。

正如您所建议的,资源所有者密码凭据 (ROPC) 授权类型的缺点是您必须向客户端提供 username/password 凭据,这原则上会阻止客户端参与 SSO 系统.

您可以想出一种创造性的方法来获取 SSO token/session 并将其传递给客户端,以通过 "password" 字段中的 ROPC 流针对授权服务器进行验证,但是您' d 是 re-inventing 授权代码授予您以 non-standard 方式输入。

简而言之:如果可以,请避免使用资源所有者密码凭据授权类型。它是 OAuth 2.0 中已弃用的授权类型,仅用于迁移场景。