问题标签 [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 投票
1 回答
180 浏览

oauth-2.0 - CAS 6.1.4 的 OAuth2:PKCE 授权码授权类型是否需要客户端密码?

我正在尝试使用 CAS 6.1.4 的 OAuth2 功能,特别是授权代码授权类型的证明密钥代码交换 (PKCE) 变体:我设置了所有内容,并且授权代码在其基本形式和 PKCE 变体中均有效。

但是,即使使用 PKCE 变体,似乎也必须提供client_secret请求参数——我还没有找到避免这种情况的方法。这似乎违反直觉,因为 PKCE 是为无法安全保存客户机密的公共客户引入的。Apereo 网站上RCF 7636 规范和文档对是否应该通过客户端密钥进行身份验证授权码请求保持沉默。

如果我错过了什么,请告诉我。

0 投票
1 回答
2712 浏览

oauth-2.0 - Active Directory 是否不支持使用 PKCE 的授权代码流?

我尝试使用当前推荐的 PKCE 授权代码流从 Active Directory 收集访问令牌。客户端将是一个公共 Angular SPA,这是选择流程的原因。

收集 openid 配置表单 AD 以及用户的授权代码效果很好。但我无法从以下端点请求访问令牌:

我试图在 Postman 中重建请求:

...最终得到以下消息:

这看起来很奇怪,因为带有 PKCE 的身份验证流程的官方规范不需要 client_secret 或 client_assertion。这仅对默认身份验证流程是必需的。

AD 实现有问题还是我配置错误?

Web 客户端的清单如下所示:

我的应用程序在 AD 中注册为公共应用程序。

在此之前发送的身份验证请求如下所示:

0 投票
3 回答
3118 浏览

oauth-2.0 - 将 Google OIDC 与代码流和 PKCE 结合使用

经过反复试验,在我看来,Google OIDC 在不提供客户端密码的情况下不支持代码流: https ://developers.google.com/identity/protocols/oauth2/native-app#exchange-authorization-code

根据 SPA 的最新最佳实践 ( https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-13 ),推荐使用代码流 + PKCE 来处理身份验证。是否有人知道使 Google 的代码流接受 code_challenge 而不是 client_secret 所需的任何技巧?也许是一个虚假的秘密?

0 投票
0 回答
261 浏览

authentication - 使用 PKCE 提供 OAuth2 身份验证的 React Native 库

我正在使用React Native开发我的第一个本机应用程序。这个应用程序将是我已经制作并且已经提供 OAuth 2.0 授权的网站的扩展(= 后端已准备好)。

我的 React Native App 可以使用 Oauth2 身份验证将用户连接到网站(首先登录和密码,然后使用 Auth Code 记住)。

我认为识别用户的最佳方式是提供授权代码流,其中包含代码交换证明密钥 (PKCE)扩展。

这是OAuth 2.0 for Mobile and Native Apps 的建议

我如何在 React Native 中实现它?我已经做了很多研究,发现了很多文章或教程(但都已弃用或不完整)。对我来说,最好的办法是重用现有代码或 javascript 库(未弃用)。

谢谢您的帮助。

0 投票
1 回答
1112 浏览

oauth-2.0 - 为什么 Azure B2C 在将授权代码流与 PKCE 一起使用时需要 client_secret

我们的团队正在构建一个 Angular 应用程序,它将使用 B2C 进行身份验证/授权,在这个应用程序中,我们希望使用 PKCE 的授权代码流来构建 OpenID 集成。

Azure B2C 似乎支持 PKCE,但由于某种原因,它还要求我们在请求访问令牌时发送 client_secret。这个对吗?在处理授权代码流时,PKCE 不应该消除对静态客户端密码的需求吗?

0 投票
1 回答
371 浏览

node.js - 如何使用 passport-azure-ad 实现身份验证代码流

我正在使用 microsoft 的 passport-azure-ad 模块来打开 ID 连接。我打算的流程是身份验证代码流,我的 azure 广告配置为身份验证代码流。我的问题是:

1) passport-azure-ad 是否像“代码”一样查看响应类型,然后它会第一次调用获取代码,然后将代码交换为令牌。因为我在实现我的代码时没有拨打两个电话,我直接获得了 access_token

2) 我们如何使用带有 passport-azure-ad 的 PKCE 实施授权代码授予流程?

我的代码如下所示

0 投票
1 回答
1730 浏览

azure - Azure AD:我可以使用授权代码令牌从 Web 服务请求访问令牌吗?

因此,这与此处的问题有关:How to enable CORS in an Azure App Registration when used in an OAuth Authorization Flow with PKCE?

我想为我们用 ExtJS 编写的单页 ​​JavaScript 应用程序实现 OAuth 2。服务器端是用 .NET(当前为 4.6.2)编写的,同时具有 UI 使用的 JSON 服务(实现 Ext.Direct)和用于客户端集成的 SOAP 服务。

我们目前处理自己的身份验证,其工作方式与授权代码流非常相似。我们使用客户端 ID、用户名和密码登录以获取令牌生成令牌 (TGT),然后使用它来请求短期产品服务令牌 (PST)。申请 PST 可延长 TGT 的使用寿命。当 TGT 过期时,用户必须重新进行身份验证。

对于 OAuth 2 路由,我显然希望用户界面将人们引导到 Azure 的登录页面,用户使用他们可能需要的任何 MFA 登录那里,然后以已知用户的身份返回 UI。我并不担心我去哪里获取产品服务令牌,尽管我认为如果可能的话去 Azure 是有意义的,因为最终我们希望每个人都朝着我怀疑的方向发展。

因此,我将上面的一些代码包装在一个 ExtJS 类中,并设法检索了一个有效的授权令牌。到目前为止,一切都很好。然后,当我尝试请求访问令牌时,我遇到了与该问题的发布者所做的 CORS 相同的问题。我现在只是看不到任何人如何将授权代码与 PKCE 流与 Azure 一起使用,因为您的应用程序肯定永远不会托管在用于登录的同一个域上?!

反正。我想知道我的选择。我现在想知道是否可以将传递回 UI(可能带有 PKCE 代码)的授权代码发布到 Web 服务,并让 Web 服务处理与 Azure 的通信以获取访问令牌。这是否有更大的成功机会,还是我会在那里遇到同样的问题?

隐式流不是一种选择。我们的客户都不会接受这一点。

还有哪些其他选择?我应该使用纯服务器端 Azure 选项,然后再担心 UI 吗?

努力寻找前进的方向!将不胜感激您可能拥有的任何见解。

干杯,韦斯蒂

0 投票
1 回答
1709 浏览

java - 带有 Keycloak 的 Spring 安全客户端 PKCE

我有一个使用 Spring Security 5.2.1 并由 Keycloak 保护的 Java 应用程序。
Keycloak 中的客户端是一个公共的 openid-connect 客户端。
它工作正常。

我现在需要使用 PKCE(代码交换证明密钥)。
由于对 PKCE 的客户端支持已添加到 Spring Security 5.2.0.M2 并且我使用 Spring Security 5.2.1,因此我可以使用 Spring Security 来实现它。
这就是好消息。
“坏”消息是,我在 Web 或 Spring Security 文档中几乎没有发现任何关于我必须如何实现它的内容。在 keycloak.json 中添加 "enable-pkce": true 不起作用,我找不到任何明确的示例来说明该做什么。

是否有一些文档、网站或其他任何东西,描述如何实现这个?

非常感谢你 !

0 投票
1 回答
531 浏览

cors - 使用“Auth Code Flow + PKCE”时来自令牌端点的 CORS 错误

我正在尝试通过redux-oidc包使用Auth Code Flow + PKCE流。一切正常,直到访问令牌的最终 POST 请求,当返回一个 CORS 错误:“访问 XMLHttpRequest at ' https://subdomain.onelogin.com/oidc/2/token ' from origin ' http:// localhost:3000 '已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。”

相关问题的答案:

  • “OneLogin 仅支持 CORS 生成会话令牌。”
  • “如果您必须从客户端对用户进行身份验证......请使用 OpenId Connect 隐式流程或授权代码流程 + PKCE。”

如果令牌端点不支持 CORS,我不清楚如何从客户端使用 Auth Code + PKCE 流。

0 投票
1 回答
512 浏览

go - Golang sha256 哈希不满足 okta 代码挑战

我正在使用 golang 来实现针对 Okta 的 PKCE 身份验证流程。Okta 需要一个至少包含 43 个字符的 url 安全字符串(验证者),然后计算一个 sha256 哈希,该哈希以 base64 URL 编码(质询)的形式发送。Okta PKCE 流程

我生成一个随机验证器。这是一个示例:aAOzSsxfONaAauKYKRABWUfZLFgVFZqgbJRaArwKAzhzEWurUAhDyzcTkSKLClFL

要生成 base64 编码的 sha256 和:

当给出verifier上面的示例时,产生了一个挑战:1XvaG5_-p9OPfxH9yeLmSWu5zGHxW6Pjq_HrdSsI-kk=

然而,在完成对/token端点的 POST 后,总是返回错误:

这是 POST 到的逻辑/token