客户端凭据授予中的 Microsoft Azure OAuth ID 令牌

Microsoft Azure OAuth ID Token In Client Credentials Grant

理想情况下,我希望能够让管理员为我的应用程序授予 application 权限,并在同一流程中登录所述应用程序。这可能吗?

我目前使用 code grant flow 进行 身份验证

然后我使用client credentials flow进行授权

是否可以将两者合并为一个流程?

如果之前未授予客户端令牌,我会立即将第一个重定向到第二个,但从用户体验的角度来看,这并不是最吸引人的流程。

如果我可以将 ID 令牌添加到客户端授权响应中,那将是完美的(我只需要同意的管理员的 UPN),但这似乎不可能。

一个关键要求是应用程序权限,因为我的应用程序对整个组织进行了更改 - 在同一流程中获取受让人的 ID 只是一种用户体验优化。

也许 OpenID Connect flow 可以做到这一点?

Is it possible to combine the two into a single flow?

不,这是两种不同的身份验证流程。

对于授权代码流程,它用于在大多数应用程序类型中执行身份验证和授权,包括单页应用程序、Web 应用程序和本机安装的应用程序。该流使应用能够安全地获取 access_tokens,可用于访问受 Microsoft 身份平台终结点保护的资源,以及刷新令牌以获取额外的 access_tokens,以及登录用户的 ID 令牌。该流程通常用于有用户交互的场景。

对于客户端凭证流,就是管理员直接给应用本身授权。当应用程序向资源提供令牌时,资源将强制应用程序本身具有执行操作的权限。这种类型的授权通常用于必须在后台 运行 并且不需要与用户立即交互的服务器到服务器交互。这个一般用在守护进程中,只能获取access_token用于访问资源

Perhaps this is possible with the OpenID Connect flow?

这里是用户登录的地方,一般都是委托权限,所以不可能。

因此,综上所述,使用客户端凭证流时无法获取 ID 令牌,因为该流中没有用户交互。