我试图弄清楚 PKCE在移动应用程序中的工作原理,但有些东西我不太明白。
因此,从我可以收集到的内容中,客户端应用程序创建了一个随机的加密安全字符串,称为代码验证器。然后将其存储。然后,应用程序会由此生成代码质询。然后将代码质询与质询的生成方式(例如 S256 或纯代码)一起在 API 请求中发送到服务器。服务器将此质询与相关请求的适当授权码一起存储。
然后,当客户端尝试将代码交换为访问令牌时,它还会在请求中发送原始代码验证器。然后,服务器检索存储的质询和最初用于为该特定代码生成质询的方法,并生成等效的 s256/plain 散列并比较它们。如果它们匹配,它会返回一个访问令牌。
我不明白这应该如何替换客户端应用程序中的秘密?当然,如果您想欺骗这一点,您只需将 client_id 视为正常并生成您自己的代码验证器和挑战,并且您处于与一开始不需要 PKCE 相同的位置。如果最初的想法是它基本上是一个“动态秘密”,那么 PKCE 在这里实际上试图解决什么?我的假设是只有当有人碰巧在“听”auth_code
返回时才存在,但是如果您再次使用 SSL,是否需要这样做?它被称为取代了您不应该在公共应用程序中存储秘密的事实,但客户端负责生成而不是服务器的事实感觉它实际上并没有帮助。