对本机应用程序的隐式授权

Implict grant for native apps

关于以下内容,我有一些事情需要澄清。 "OAuth 2.0 for Native Apps" 规范说,

However, as the implicit flow cannot be protected by PKCE [RFC7636] (which is required in Section 8.1), the use of the Implicit Flow with native apps is NOT RECOMMENDED.

为什么我们不应该使用隐式授权类型背后的推理让我感到困惑。

据我了解,授权代码授予需要 PKCE,因为它需要 2 个单独的调用来获取访问令牌,我们需要确保这两个请求都是由同一个应用程序完成的。 如果我错了,请纠正我。

现在,由于隐式授权类型不需要这样的 2 个调用来获取令牌,我认为我们真的不需要 PKCE。如果我错了,请再次纠正我。

"implicit flow does not need to be protected by PKCE"。那为什么"implicit flow cannot be protected by PKCE"成为了上面避免使用它的原生应用的理由呢?

As I understand, PKCE is required for Authorization code grant because it needs 2 separate calls to get an access token and we need to make sure both these requested are done by the same app.

句子的第一部分不正确,第二部分(“我们需要确保...”)正确。由于有 2 个请求,因此不需要 PKCE - 这两个请求使 PKCE 可以实现。问题在于谁可以在 code/token 到达请求它的应用程序之前窃取它。隐式流程与授权代码流程具有相同的安全问题 - 在 RFC 的 section 8.1 中进行了描述。如果没有 PKCE,如果攻击者获得代码或访问令牌,他可以立即使用令牌或先用代码交换令牌。使用 PKCE,代码在不知道 code_verifier.

的情况下毫无用处

由于隐式流没有得到任何可以解决其安全问题的安全扩展,因此不推荐使用。

并且根据您选择的重定向 URI 选项,将重定向的片段部分 URL(由隐式流用于传输令牌)传送到应用程序时可能会出现问题。但是我不确定这部分。