在 OpenID 连接授权代码流程中使用 PKCE 时,我们需要 client_secret 吗?

Mah*_*iah 5 google-api oauth-2.0 openid-connect pkce

根据PKCE 规范,OAuth 提供程序使用 code_verifier 来避免中间人攻击。我的理解是,它是基于 JavaScript 的单页应用程序 (SPA) 将 OAuth 代码交换为令牌的最佳替代方案。

当我用 Google API 进行实验时,它说“client_secret 丢失”。

这是 HTTP 请求和响应。

ID:1 地址:https: //oauth2.googleapis.com/token Http 方法:POST 内容类型:application/x-www-form-urlencoded 标头:{Content-Type=[application/x-www-form- urlencoded],接受=[ / ]} 有效负载:grant_type=authorization_code&code=4%2F1AH3Ubnm550IoT8AZ_e_eqLYDn3-JyXVo22LOcAlsWPnxTV_o0tV2N1YMNFtqhvFm65n4tuZmHfK5tkKLOsbnRw&scope=openid+profile+email&redirect_uri=https%3 A%2F%2Flocalhost%3A8443%2Fdemo&client_id=myclientid.apps.googleusercontent.com&code_verifier=iv8n89-Dh3QD1uroYm6e6jcpZwxff60m -RYYlmLYArun6KF8o0z%7Ee3EjyVyYUp.4XxSbyI47QQSCMRY542sLWSUnxAG8e0a%7ETjmF_UFioJMA_ctB2jz6qbcYtu9uUOKp

ID:1 响应代码:400 编码:UTF-8 内容类型:application/json;charset=utf-8 标头:{Accept-Ranges=[none],Alt-Svc=[h3-28=":443";ma=2592000,h3-27=":443"; ma=2592000,h3-25=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; 马=2592000,quic =“:443”;马=2592000;v="46,43"],Cache-Control=[私有],内容类型=[application/json;charset=utf-8],日期=[Mon, 2020年6月22日04:41:53 GMT],服务器=[HTTPServer2上的脚手架],传输编码=[分块],Vary=[Origin,Accept-Encoding,Referer, X-Origin], X-Content-Type-Options=[nosniff], X-Frame-Options=[SAMEORIGIN], X-XSS-Protection=[0]} 有效负载: { "error": "invalid_request", "error_description ": "client_secret 丢失。" }

我对“传递 code_verifier 时不需要 client_secret”的理解是否错误,或者 Google 不支持 PKCE 或者我是否错过了请求中的其他参数?请帮忙。

Gar*_*her 3

我看了一下,在尝试使用最新的单页应用程序标准时遇到了同样的问题。查看 Google 文档,他们的实现似乎仍然基于隐式流程

我验证您可以发送response_type='token id_token'并成功获取令牌,尽管我也更喜欢使用授权代码流(PKCE)。