「应用安全」OAuth和OpenID Connect的全面比较(42)

攻击成功需要一些条件 , 但如果您考虑发布智能手机应用程序 , 强烈建议客户端应用程序和授权服务器都支持PKCE 。 否则 , 恶意应用程序可能拦截授权服务器发出的授权代码 , 并将其与授权服务器的令牌端点处的有效访问令牌交换 。

在2012年10月发布了RFC 6749(OAuth 2.0授权框架) , 因此即使熟悉OAuth 2.0的开发人员也可能不知道2015年9月最近发布的RFC 7636 。 但是 , 应该注意的是“OAuth 2.0 for Native Apps”草案表明 , 在某些情况下 , 它的支持是必须的 。

客户端和授权服务器都必须支持PKCE [RFC7636
使用自定义URI方案或环回IP重定向 。 授权服务器应该使用自定义方案拒绝授权请求 , 或者如果不存在所需的PKCE参数 , 则将环回IP作为重定向URI的一部分 , 返回PKCE [RFC7636
第4.4.1节中定义的错误消息 。 建议将PKCE [RFC7636
用于应用程序声明的HTTPS重定向URI , 即使这些URI通常不会被拦截 , 以防止对应用程序间通信的攻击 。

支持RFC 7636的授权服务器的授权端点接受两个请求参数:code_challenge和code_challenge_method , 令牌端点接受code_verifier 。 并且在令牌端点的实现中 , 授权服务器使用(a)客户端应用程序呈现的代码验证器和(b)客户端应用程序在授权端点处指定的代码质询方法来计算代码质询的值 。 如果计算的代码质询和客户端应用程序在授权端点处呈现的code_challenge参数的值相等 , 则可以说发出授权请求的实体和发出令牌请求的实体是相同的 。 因此 , 授权服务器可以避免向恶意应用程序发出访问令牌 , 该恶意应用程序与发出授权请求的实体不同 。

推荐阅读