我对PKCE(RFC 7636)有疑问。使用授权代码授权的OAuth客户端有两个组件:(1)资源所有者启动授权请求的设备部分;(2)服务器上可以接受和发送HTTPS消息的重定向端点。 / p>
OAuth的PKCE扩展让客户端执行此操作:
第2步发生在资源所有者的设备上。一旦资源所有者批准了该请求,他/她的浏览器就被重定向到客户端的重定向端点。步骤3发生在重定向端点。
所以问题是,重定向端点如何知道code_verifier值?它是在资源所有者的设备上生成的。
答案 0 :(得分:1)
所以问题是,重定向端点如何知道 code_verifier值?它是在资源所有者的设备上生成的。
因为重定向端点有效地路由到调用授权端点的同一设备上的端点。
它可能被注册为环回重定向,应用程序声明的重定向或自定义URL方案,但设备会将重定向路由到相应的应用程序,或者应用程序将侦听相应的端口以进行环回。
使用授权代码授权的OAuth客户端有两个 组件:(1)资源所有者设备上的部分 发起授权请求和(2)重定向端点 可以接受和发送HTTPS消息的服务器。
机密客户端在可以接受和发送HTTPS消息的服务器上具有重定向端点。
公共客户端没有 - 使用PKCE的本地客户端是still public clients。
答案 1 :(得分:0)
为了构建所提供的信息,PKCE旨在确保重定向URI通过授权代码拦截攻击路由回请求应用程序,而不是恶意应用程序。在这种情况下,合法应用程序将知道验证程序,但恶意应用程序将不知道验证程序。
PKCE合法应用流程
合法的应用程序流如下所示,授权令牌请求被重定向回SystemBrowser,然后返回到原始NativeApp。
授权码拦截攻击
可以将恶意应用程序引入操作系统。使用或不使用PKCE,本机应用程序可以接收授权代码,但它不会知道验证者,因此无法完成令牌交换。