问题标签 [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.
.net - 哪些 OAuth 框架支持 PKCE (RFC 7636)?
我正在评估授权代码工作流程的使用。RFC 7636 发现了公共客户端的问题并提出了解决方案。RFC 7636仅在 2015 年 9 月发布。
哪些 OAuth2 框架实现了该 RFC(即“代码交换的证明密钥”)的建议?具体来说,以下哪个版本具有实现 PKCE 的版本?
- 春天
- 微软.NET
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 的配置:
和客户端配置
oauth-2.0 - 使用 PKCE 授予 OAuth 代码授权,但适用于应用程序,而不是用户
OAuth2 规范为机器对机器授权定义了客户端凭据授权,其中不涉及用户。身份通过客户端密码确认。这不适用于本地客户端,例如移动应用程序,因为无法保证存储的客户端机密。
移动应用程序可以利用 OAuth 代码授权授权和代码交换证明密钥 (PKCE),它允许动态生成密钥。如果您需要用户授权/身份验证,这很好。
但是,如果您只需要保护您的 API 资源,以便只有您的移动应用程序可以使用它,但您不跟踪用户怎么办?也就是说,我想为我的应用程序而不是用户获取访问令牌。
如果只能禁用登录和同意屏幕,代码授权 + PKCE 似乎会很好用。只需返回授权码。我希望在 IdentityServer3 中找到一种方法,但没有。
是否有允许这样做的配置或流程?还是我犯了安全错误?
编辑在我看来,使用 PKCE应该允许具有两个反向通道调用的流,一个到授权端点,另一个到令牌端点。本质上,没有浏览器重定向的代码授权。我知道这样的流程不在规范中,但我是对的吗?无论如何,问题仍然存在,如何使用自己的帐户授权移动应用程序,而不是用户的?
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
通话中使用,我得到了
每次在这种情况下。这是一个缺陷还是我遗漏了一些明显的东西?
oauth-2.0 - OAuth2:使用 PKCE 而不是 client_secret
我有一个使用 OAuth2 的隐式授权进行身份验证的网络应用程序。
我希望能够使用刷新令牌使我的会话长时间保持活动状态。但由于我无法将 client_secret 安全地存储在 Web 应用程序中,因此我无法使用传统的Authorization Code grant。
使用PKCE代替 client_secret 是否安全,或者这样做是否会失去某种程度的安全性?
oauth - PKCE:重定向端点如何知道 code_verifier?
我有一个关于 PKCE (RFC 7636) 的问题。使用授权代码授予的 OAuth 客户端有两个组件:(1) 资源所有者设备上发起授权请求的部分,以及 (2) 服务器上可以接受和发送 HTTPS 消息的重定向端点。
OAuth 的 PKCE 扩展让客户端执行以下操作:
- 生成一个名为 code_verifier 的加密随机字符串。
- 创建 code_verifier 的 SHA-256 摘要并对其进行 Base64 编码。将其与授权请求一起发送。
- 当客户端获取授权码并将其发送到令牌端点以获得访问令牌时,请包含原始 code_verifier 值。
第 2 步发生在资源所有者的设备上。一旦资源所有者批准了请求,他/她的浏览器就会被重定向到客户端的重定向端点。第 3 步发生在重定向端点。
那么问题来了,重定向端点怎么知道code_verifier的值呢?它是在资源所有者的设备上生成的。
oauth-2.0 - Doorkeeper如何为PKCE客户端实现刷新token
我正在使用最新版本的 Doorkeeper(这是一个很棒的宝石)并启用了 PKCE。它适用于授权流程(我使用授权码)。但是,当我稍后尝试刷新令牌时,我得到 401。
参数
code_challange
客户端是使用 AppAuth 的移动应用程序,如您在上面看到的,刷新令牌时不会发送。正如我们在这里所读到的,PKCE 的创建者说服务器应该允许刷新令牌而无需再次发送代码质询。gem是如何实现的?
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":"验证码验证失败"}
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 这样的网络应用程序还是他们的另一种解决方案?