问题标签 [pkce]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
519 浏览

.net - 哪些 OAuth 框架支持 PKCE (RFC 7636)?

我正在评估授权代码工作流程的使用。RFC 7636 发现了公共客户端的问题并提出了解决方案。RFC 7636仅在 2015 年 9 月发布。

哪些 OAuth2 框架实现了该 RFC(即“代码交换的证明密钥”)的建议?具体来说,以下哪个版本具有实现 PKCE 的版本?

  • 春天
  • 微软.NET
0 投票
1 回答
1427 浏览

android - 如何在 AppAuth 中使用“普通”PKCE 代码质询方法?

默认情况下,AppAuth会针对身份验证请求发送S256 PKCE代码质询。如果我需要与只支持plain代码质询方式的服务器进行互操作,我该如何配置我的授权请求?

0 投票
1 回答
766 浏览

asp.net-core - 尝试使用 IdentityServer4 在混合流(使用 PKCE)中实现授权时出现“意外的 code_verifier”

我正在尝试实现本机客户端(最初将 .NET 控制台应用程序作为模型)以使用 OpenID Connect 对 IdentityServer4 作为我的 STS 进行身份验证。我使用 IdentityModel.OidcClient2 作为我的客户端库。
我选择实现基于代码的身份验证流程。

我能够通过身份验证阶段,但是当我进入授权阶段时,我在客户端收到一条错误消息

无效授予

在 IdentityServer 的错误消息是

“意外的 code_verifier:XXXXXXXXXXXX....”


即使当我打开 fiddler 并查看请求和调试信息时 - 发送到 IdentityServer 以进行授权的代码验证器似乎是首先在AuthorizationState类中生成的客户端。
如果我执行,AuthorizationState.CodeVerifier = null那么它可以工作。
但我确实想实施 PKCE 以获得额外的安全性。我怎样才能做到这一点?

这是该特定客户端
Identity Server 的配置:

和客户端配置

0 投票
0 回答
240 浏览

oauth-2.0 - 使用 PKCE 授予 OAuth 代码授权,但适用于应用程序,而不是用户

OAuth2 规范为机器对机器授权定义了客户端凭据授权,其中不涉及用户。身份通过客户端密码确认。这不适用于本地客户端,例如移动应用程序,因为无法保证存储的客户端机密。

移动应用程序可以利用 OAuth 代码授权授权和代码交换证明密钥 (PKCE),它允许动态生成密钥。如果您需要用户授权/身份验证,这很好。

但是,如果您只需要保护您的 API 资源,以便只有您的移动应用程序可以使用它,但您不跟踪用户怎么办?也就是说,我想为我的应用程序而不是用户获取访问令牌。

如果只能禁用登录和同意屏幕,代码授权 + PKCE 似乎会很好用。只需返回授权码。我希望在 IdentityServer3 中找到一种方法,但没有。

是否有允许这样做的配置或流程?还是我犯了安全错误?

编辑在我看来,使用 PKCE应该允许具有两个反向通道调用的流,一个到授权端点,另一个到令牌端点。本质上,没有浏览器重定向的代码授权。我知道这样的流程不在规范中,但我是对的吗?无论如何,问题仍然存在,如何使用自己的帐户授权移动应用程序,而不是用户的?

0 投票
0 回答
123 浏览

authentication - Auth0 PKCE 社交授权不支持连接参数

根据文档 Auth0 的 PKCE 授权代码授予流程不支持此页面上指定的连接参数。 https://auth0.com/docs/api-auth/tutorials/authorization-code-grant-pkce

我向PKCE 的端点发出了一个GET请求,包括上面页面上指定的所有参数。/authorize然后我发出一个电话后/oauth/token,我得到了令牌就好了。

/authorize然而,由于端点中没有连接参数(对于 PKCE),一个中间 auth0 页面正在打开(要求用户选择要使用的社交连接)并为用户带来额外的步骤。/authorize当我在调用中包含连接参数时。它像以前一样给出了一个代码。但是,此代码不能在/oauth/token通话中使用,我得到了

每次在这种情况下。这是一个缺陷还是我遗漏了一些明显的东西?

0 投票
2 回答
1290 浏览

oauth-2.0 - OAuth2:使用 PKCE 而不是 client_secret

我有一个使用 OAuth2 的隐式授权进行身份验证的网络应用程序。

我希望能够使用刷新令牌使我的会话长时间保持活动状态。但由于我无法将 client_secret 安全地存储在 Web 应用程序中,因此我无法使用传统的Authorization Code grant

使用PKCE代替 client_secret 是否安全,或者这样做是否会失去某种程度的安全性?

0 投票
2 回答
739 浏览

oauth - PKCE:重定向端点如何知道 code_verifier?

我有一个关于 PKCE (RFC 7636) 的问题。使用授权代码授予的 OAuth 客户端有两个组件:(1) 资源所有者设备上发起授权请求的部分,以及 (2) 服务器上可以接受和发送 HTTPS 消息的重定向端点。

OAuth 的 PKCE 扩展让客户端执行以下操作:

  1. 生成一个名为 code_verifier 的加密随机字符串。
  2. 创建 code_verifier 的 SHA-256 摘要并对其进行 Base64 编码。将其与授权请求一起发送。
  3. 当客户端获取授权码并将其发送到令牌端点以获得访问令牌时,请包含原始 code_verifier 值。

第 2 步发生在资源所有者的设备上。一旦资源所有者批准了请求,他/她的浏览器就会被重定向到客户端的重定向端点。第 3 步发生在重定向端点。

那么问题来了,重定向端点怎么知道code_verifier的值呢?它是在资源所有者的设备上生成的。

0 投票
0 回答
366 浏览

oauth-2.0 - Doorkeeper如何为PKCE客户端实现刷新token

我正在使用最新版本的 Doorkeeper(这是一个很棒的宝石)并启用了 PKCE。它适用于授权流程(我使用授权码)。但是,当我稍后尝试刷新令牌时,我得到 401。

参数

code_challange客户端是使用 AppAuth 的移动应用程序,如您在上面看到的,刷新令牌时不会发送。正如我们在这里所读到的,PKCE 的创建者说服务器应该允许刷新令牌而无需再次发送代码质询。gem是如何实现的?

0 投票
1 回答
1616 浏览

go - Auth0 - 无法验证代码验证器错误

我正在编写一个脚本,它使用 auth0 通过远程 API 进行身份验证。

按照本教程: https ://auth0.com/docs/api-auth/tutorials/authorization-code-grant-pkce

例如,我使用该函数生成代码质询eQM2dqasJN3-gXcM0g1Se-CmAn8PyU7c5uHRKU7Exa0

我用有效载荷制作了一个 HTTP Post

我得到错误:

{403 禁止 403...

{"error":"invalid_grant","error_description":"验证码验证失败"}

对此的其他参考表示字符在 base64 编码挑战中未正确编码/替换。

我已经尝试使用以下两种编码的 /

但我总是得到:

{"error":"invalid_grant","error_description":"验证码验证失败"}

0 投票
0 回答
68 浏览

python-3.x - Python Ouath2 PKCE

所以我开始了将一个完整的 Web 应用程序(php、JavaScript 和 html)传输到基于客户端的 python 应用程序的过程。通常,当您获得回调 URL 时,您会在 php 甚至 javascript 中处理它。我非常不确定如何在 python 中处理它。我已经看到了有关如何实现 Ouath2 Pkce 和普通 Ouath2 的不同文档,但让我感到困惑的是我如何获得这样的回调(https://localhost/callback/?code=balsh12312312&state=unique-state)我怎样才能获得编码并检查唯一状态?我需要使用像 Flask 这样的网络应用程序还是他们的另一种解决方案?