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

openid-connect - B2C 身份验证未返回 access_token

我正在尝试使用 PKCE 一个角度项目来实现授权代码流。我正在使用 angular-auth-oidc-client。我们已经有一个现有的基于 IdentityServer4 的内部实现,客户端可以很好地对抗它,但我们现在正尝试将我们的身份验证迁移到 Azure AD B2C,而不是在内部实现。

我已经配置了 Azure AD B2C 和我的客户端应用程序。这是配置: 我的应用配置

这是我在客户端 OIDC 服务上的配置:

问题:在令牌响应中没有访问令牌: 没有 access_token

即使我在客户端配置中检查了 accesss_token 复选框。我在这里想念什么?

0 投票
1 回答
238 浏览

c# - 从 API 请求访问令牌时请求无效:C#、Azure 函数、OAuth

当我以编程方式向令牌端点请求访问令牌时,我收到“错误请求:无效响应”。参数需要作为 x-www-formurlencoded 传递

这是我的代码:

这是来自 react 应用程序的调用: 在此处输入图像描述

你能告诉我我哪里错了吗?或者给我一个例子?

新建议版本:

0 投票
0 回答
143 浏览

oauth - 代理 oauth SSO 流的风险有多大?

所以,我有多个项目、api 等......而且我想要一个中央登录系统。所以我转向 SSO 和 openId PKCE 流程。

假设我想使用一些云解决方案来节省时间和金钱——假设是 AWS cognito,因为它与 aws 产品的良好集成。

现在假设与竞争对手和我的需求相比,我的云解决方案在许多方面仍然支持一半,例如,我们可以想象 oauth sso 登录页面的托管 ui 无法正确定制甚至翻译,这是不可以的-去。

现在,我们可以想象我们了解了 oauth PKCE 代码授权流程,并且我们构建了一个小型服务器或几个 lambdas 来代理 oauth 实现,以便我们可以构建一个替代前端。服务器将:

  1. 使用客户端应用程序提供的 code_challenge 发出初始授权请求,获取状态 - 或者在 cognito 的情况下获取 csrf 令牌 - 并将其返回给我们的“自定义登录字体”。

  2. “自定义登录前端”可以使用 csrf、登录名和密码调用我们的服务器,然后我们的服务器会调用 oauth 云解决方案的登录端点,并使用代码检查响应是否重定向到我们的回调提供 - 获取该代码并将其返回到登录前端,以便在一个不错的加载器完成移动后最终进行重定向。

做这样的事情会很糟糕,特别是知道如果我们不能将登录前端和服务器托管在同一个域上,那么对我们的 oauth 云解决方案的登录 POST 请求可能必须设置一个不诚实的“HOST”标头才能通过请求我们的 oauth 云解决方案?

最后,我说得通吗?

0 投票
2 回答
783 浏览

c# - 有没有办法在 c# 桌面应用程序中使用 oauth2 登录 Xero api?

有几个使用 oauth2 来登录 Xero 的 .Net 示例代码,但它们都适用于浏览器(大多数 C# 示例代码用于 ASP.NET MVC)。

我打算使用 Xero Api 开发桌面应用程序,但 Xero 官方教程说移动或桌面应用程序应该使用 PKCE 流而不是使用 ClientID/Secret 方案。

在此 PKCE 流程中,用户应与浏览器交互以获取授权码。

我想知道是否有任何方式无需用户交互即可登录。

0 投票
1 回答
965 浏览

javascript - Expo AuthSession promptAsync - 获取新访问令牌时无法等待返回

我们有一个使用 AuthSession 的托管 Expo 应用程序,专门用于将我们的应用程序部署到 Web 环境。使用 Auth0 和 PKCE 授权进行身份验证。

当我们当前的访问令牌已过期时,尝试获取新的访问令牌时遇到了问题。在发出 HTTP 请求之前,我们检查访问令牌是否已过期,如果已过期,我们使用 AuthSession.promptAysnc() 获取新的。问题是我们无法在发出 HTTP 请求之前等待 promptAsync 完成。

我们错过了什么吗?

0 投票
1 回答
740 浏览

flutter - Dart/Flutter 中的 Spotify PKCE:“code_verifier 不正确”

将授权代码流与 Spotify-API 的 PKCE 一起使用,我收到我的 code_verifier 不正确的错误,从我现在所知道的情况来看,这一定是一个编码问题。
{"error":"invalid_grant","error_description":"code_verifier was incorrect"}
这是我写的原始代码:

这就是我理解 Spotify-Authorisation-Guide ( https://developer.spotify.com/documentation/general/guides/authorization-guide/ ) 的方式。

找到这篇文章(https://stackoverflow.com/a/63174909/14266484)后,我尝试将修复程序移植到 Dart 但失败了。据我了解,代码对 ascii 编码的 code_verifier 进行哈希处理,然后使用 btoa() 再次将其转换为 ascii。这个函数似乎也做base64(但不是base64Url,也许这就是为什么某些部分必须手动更换?)。

我还尝试了不同的编码方式:
-使用 String.codeUnits(但这是使用 UTF-16)
-使用 String.fromCharCodes() 获取 sha256 函数以及 base64(-Url) 函数的字符串(应该是使用 ASCII?)
- 在 ASCII 和 UTF-8 之间切换(在这种情况下应该不会有什么不同,因为我的 verifier_code 仅由 ASCII 字符组成)

编辑:
要提出我使用的请求:

0 投票
0 回答
110 浏览

angular - Spring Oauth2 PKCE 授权

我正在配置我的 spring oauth2 以使用 PKCE 授权。如果我在浏览器上对其进行测试,它可以按预期工作,但是我在执行 Angular 部分时遇到了一些问题,因为在我进行 GET 访问后会返回默认的 spring 安全登录表单:

我遵循了本教程:https ://sultanov.dev/blog/authorization-code-flow-with-pkce-in-spring-security-oauth/

0 投票
1 回答
249 浏览

authorization - Keycloak、PKCE 和外部 IDP

我有一个需要与 IDP 联合的要求。我过去从未遇到过问题,在这种情况下,我遇到了问题,因为第三方/外部 IDP 启用并执行了 PKCE。

有没有办法联合到启用了 PKCE 的 IDP。基本上换句话说,我应该能够将 code_challenge 和 code_challenge_method 转发/发送到外部 IDP。我可以在我的 IDP 上启用 PKCE 而不会出现任何问题,并在需要时将相同的标头转发到外部 IDP,但我看不到这样做的方法。我也尝试在身份提供者配置上配置“转发查询参数”字段,但无济于事。

但是我遇到了这张票https://issues.redhat.com/browse/KEYCLOAK-9809它在哪里说这不受支持,因为它只支持公共客户 - 所以仍然如此吗?

除此之外,如果不支持,推荐的解决方法是什么?我的意思是我可以要求外部 IDP 人员更改他们的配置,但在提出出路之前我想知道推荐的方式。非常感谢。

0 投票
1 回答
112 浏览

asp.net-core - 使用 PKCE 时是否需要使用参考令牌?

我目前正在开发一个将 IdentityServer4 用作授权/身份验证服务器的项目。我们只有一个客户端 (Angular) 和一些基于资源的 API (ASP.NET Core)。目前我们使用代码流 (PKCE) 并同时引用令牌,利用 IdentityServer4 提供的令牌自省端点。

同时使用 PKCE 和参考令牌是否过大?从 API 请求始终调用 IdentityServer4 的令牌自省端点会为收到的每个资源请求添加另一个请求。我们想知道使用引用令牌是否比仅使用带有普通访问令牌的 PKCE 给我们带来任何安全优势。

谢谢!

0 投票
0 回答
307 浏览

cypress - 使用 Cypress 在 Chrome 无头模式下忽略 X-Frame-Options

我正在构建一个赛普拉斯测试,该测试使用@msal-browser PKCE 身份验证登录到我的应用程序,该身份验证针对位于不同域中的 Azure B2C 租户,这对我造成了 x-frame 问题:

我意识到跨域测试违反了赛普拉斯登录最佳实践——但是,我的身份验证方法使用的是 PKCE,而不是隐式授权流程,因此如果没有浏览器交互,我就无法获得令牌。此外,轻微的片状风险是我愿意为实际登录到我的应用程序的实时集成测试做出的权衡。

我通过安装第三方扩展程序来使用建议的解决方法来忽略 X-Frame 标头,并且效果很好。当我尝试在--headless模式下运行它时,问题就来了。Chrome不允许以无头模式安装扩展程序,因此这种解决方法对于 CI 环境来说确实是站不住脚的。

除了存根验证之外,我不知道如何处理这个问题。鉴于隐式流的已知漏洞和 PKCE 的兴起,它认为应该有一个选项可以在赛普拉斯内部处理这个问题。我对赛普拉斯比较陌生,所以我肯定错过了一些简单的东西吗?