Azure AD B2C - 基于客户端类型的身份验证代码流与隐式授权流

ven*_*atr 5 oauth-2.0 openid-connect azure-ad-b2c

OAuth 2.0 规范定义了机密和公共客户端。https://tools.ietf.org/html/rfc6749#section-2.1

这是根据 OAuth 2.0 规范的处方

  1. 机密客户端 - Web 应用程序 - 身份验证代码授予流程。
  2. 公共客户端 - 桌面应用程序、移动应用程序、SPA(单页应用程序) - 隐式流程。

但是,根据 Microsoft 文档,AD B2C 的处方如下 https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oauth-code

  1. 机密客户端 - Web 应用程序 - OpenIDConnect 登录(建立在授权代码之上)
  2. 公共客户端 - 桌面应用程序、移动应用程序 - 身份验证代码授予流程
  3. 公共客户端 - SPA(单页应用) - 隐式流程

基于上述推论,我们对 Web 应用程序和 SPA 很清楚,这里没有混淆。

但是,对于桌面和移动应用程序,为什么 Microsoft 建议使用 Auth 代码授予流程而不是隐式流程 [即使根据 Microsoft 文档,它们也是公共客户端]?

ven*_*atr 5

发布我从 Microsoft 收到的答案,我认为在这种情况下更合适。

请参考https://tools.ietf.org/html/rfc8252#section-8.2,下面说 -

OAuth 2.0 隐式授予授权流程(在 OAuth 2.0 [RFC6749] 的第 4.2 节中定义)通常适用于在浏览器中执行授权请求并通过基于 URI 的应用间通信接收授权响应的实践。但是,由于 PKCE [RFC7636](第 8.1 节要求)无法保护隐式流,因此不建议将隐式流与本机应用程序一起使用。

在没有用户交互的情况下,通过隐式流授予的访问令牌也无法刷新,这使得授权代码授予流(可以发布刷新令牌)成为需要刷新访问令牌的本机应用程序授权的更实用的选项。