问题标签 [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 回答
3902 浏览

identityserver4 - IdentityServer4 PKCE 错误:“转换后的代码验证器与代码质询不匹配”

我无法使用 Postman 获得 IdentityServer4 PKCE 授权。

使用在线工具,我创建了必要的部分:

选择一个随机字符串:

1234567890

获取其 SHA-256 哈希:

c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646

Base64 对哈希进行编码以获得代码挑战:

Yzc3NWU3Yjc1N2VkZTYzMGNkMGFhMTExM2JkMTAyNjYxYWIzODgyOWNhNTJhNjQyMmFiNzgyODYyZjI2ODY0Ng==

在浏览器中,我导航到以下 URL,填写我的凭据并从分段的重定向 URL 中检索代码。

将代码兑换为令牌时,我通过了 code_verifier(SHA-256 哈希),但我的 IdentityServer 记录了以下错误:

“转换后的代码验证器与代码质询不匹配”。

在他的博客文章中,作者使用以下代码来生成零件。

但我在该方法的存储库中找不到代码ToCodeChallenge

为什么我手动生成的挑战与验证过程中使用的挑战不匹配,我错过了什么?

0 投票
1 回答
600 浏览

spring-security - 使用带有 Okta OIDC JWT 的 Spring Security 时出现问题

[请参阅下面的更新部分以获取最新版本]

我正在尝试使用 Spring Security 设置 Spring Boot REST 应用程序。我们的前端在 Okta 中使用 OIDC 对我们的用户进行身份验证,并在 Authorization Bearer 令牌中传递 JWT。Okta 正在使用 PKCE。

我正在引用以下示例,它似乎是一个非常简单的设置: https ://docs.spring.io/spring-security-oauth2-boot/docs/current/reference/html/boot-features-security-oauth2 -resource-server.html

我们的 Spring Boot 应用程序只是一个资源服务器,所以我想我只需要按照 2.1 到 2.2.3 节中的说明进行操作即可。我@EnableResourceServer在我的应用程序中有以下内容application.yml

当我使用 Postman 调用我的应用程序时,我收到 401 错误:

它显示了有效的令牌,我可以通过调用 Oktauserinfo端点来验证。不幸的是,它没有给我任何其他信息。

org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter我最终在课堂上设置了断点。进入从该位置调用的代码,错误是在代码中引起的org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager

在同一类中调用以下代码:

似乎代码使用令牌本身作为从哈希映射中检索令牌的键。正如您在上面看到的,它getPrincipal()用于获取“令牌”。在我看来,它认为令牌应该是一个用户 ID,它试图用它来查找用户的令牌。当值已经存在时,它使用令牌作为获取值的键似乎很奇怪。

有任何想法吗?

<<<<<<<<<<<<<<更新>>>>>>>>>>>>>>>>

我关注了此链接中的文档: https ://github.com/spring-projects/spring-security/tree/5.2.1.RELEASE/samples/boot/oauth2resourceserver-jwe

application.yml现在看起来像这样:

这现在肯定是调用 JWK URI,而之前不是。但是,现在我收到以下错误:

我在该代码中设置了断点,无论出于何种原因,kid从 Okta 中返回的令牌/JWT 与 Okta 中的任何键都不匹配jwk-set-uri

0 投票
1 回答
472 浏览

c# - PKCE 代码流中重定向页面的必要性(IdentityServer4)

使用带有 IdentityServer4 的 PKCE 代码流处理项目。我在 IS4 示例中发现了这种代码的平静:

所以问题是我们为什么要显示重定向页面以及它如何改善用户体验?Redirec 视图上的唯一内容是消息“您现在正在返回到应用程序”。你能给我任何理由这样做或任何必要的情况吗?谢谢!

0 投票
1 回答
146 浏览

android - OKTA SSO 注销问题

我正在使用okta-sdk-appauth-android库在移动原生 android 应用程序中进行身份验证。

登录有效,但我在注销和下一个登录周期时遇到问题。当我使用库中的注销方法时,在下一个登录周期webview中显示登录屏幕,但它立即登录用户而没有手动提供登录名和密码的选项。这是正常行为吗?使用这种登录方式,我无法在注销后立即登录另一个用户。只有有时有提供登录名和密码的选项……这取决于什么?我可以在每次注销后强制提供登录名和密码吗?即使在我的访问和刷新令牌过期后,它也会自动登录用户。我正在使用本机应用程序配置 + PKCE.

0 投票
0 回答
843 浏览

spring - 如何在 Spring Security OAuth Provider 中实现 PKCE 授权码?

我有一个使用 Spring Security 功能实现的有效授权服务器和资源服务器,这些功能为我组织中的所有注册客户端提供单点登录。

它支持以下授权类型:

  • Web 应用程序的授权码
  • 密码
  • 隐式

现在,我们的新产品之一是使用 React 构建的单页面应用程序。为了从我们的自定义身份验证服务器对其进行身份验证和授予访问令牌,我们正在增强 Spring 项目以支持 PKCE 授权类型,并确保现有功能不会中断。

我知道我需要使用工件“spring-security-oauth2-core”的最新 Spring Security 5 类,但我无法找到任何关于它的文档或示例代码示例。任何指针都会有很大帮助。

0 投票
2 回答
1002 浏览

oauth-2.0 - 在使用 PKCE 的 OAuth 2.0 授权代码流中,是什么阻止了在第一次调用身份验证服务器时拦截代码质询?

想象一下这次攻击

  1. 攻击者拦截对授权服务器的第一次调用,然后他们进行代码挑战。(图中的步骤 1)
  2. 攻击者现在使用授权码拦截来自授权服务器的响应。(图中的步骤 2)
  3. 然后攻击者可以 POST 授权码和验证码来获取访问令牌。(第 3 步)

参考这张图: 流程:在此处输入图像描述

问题

  1. 是什么阻止了攻击者拦截对授权服务器的第一次调用?这就是为了让授权码 + PKCE 比隐式流更安全。

  2. 也许调用是否被拦截并不重要,因为代码质询被散列,因此攻击者没有第二次调用所需的代码验证器。但是,如果代码挑战没有被散列怎么办?

0 投票
3 回答
12054 浏览

javascript - 在带有 PKCE 的 OAuth 授权流中使用时,如何在 Azure 应用注册中启用 CORS?

我有一个纯 Javascript 应用程序,它尝试使用带有 PKCE 的 OAuth 授权流从 Azure 获取访问令牌。

该应用程序未托管在 Azure 中。我只使用 Azure 作为 OAuth 授权服务器。

在 Azure 中,我只有一个应用注册(不是应用服务)。

Azure 应用注册

获取授权码的第一步有效。

但是获取访问令牌的 POST 失败。(图片来自这里

使用 PKCE 的 OAuth 授权代码流

从源“ http://localhost:8080 ”访问“ https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token ”的 XMLHttpRequest已被 CORS 策略阻止:无“访问” -Control-Allow-Origin' 标头存在于请求的资源上。

在 Azure 中的哪个位置为应用注册配置 CORS 策略?

0 投票
1 回答
658 浏览

amazon-cognito - 通过 Amplify [Okta] 向 Cognito Federated Identiy 传递代码挑战

我将 Cognito 用户池与联合身份集成 [ Okta - 作为安全 Web 身份验证]。该流程适用于没有PKCE 的授权代码流程(使用 Amplify 和 Angular)。

创建了一个与 SPA(在 Okta 中)类似的应用程序,以启用 PKCE 并与 Cognito 联合身份集成。当我们重定向到托管 UI 时,挑战将通过 URL 传递给托管 UI。

Cognito 托管 UI URL 挑战

但是在它重定向到 okta 之后,它会抛出这个错误。

当令牌端点身份验证方法为“无”时,需要 pkce 代码质询

Cognito 中是否需要任何其他配置才能将代码挑战传递给 Okta。

我在 Cognito 和 Okta 中使用授权码流。

在 Okta 中附加配置。 登录重定向的 Okta 配置

在 Cognito 中附加配置 认知配置

0 投票
1 回答
1327 浏览

vuejs2 - 带有 Laravel 6 Passport 的 Vue SPA

背景:我在身份验证方面的唯一经验是普通的基于表单的登录、典型的用户名和通过重定向或使用 JWT 进行常规登录的控制器的密码。我想使用 Laravel Passport 来实现同样的目标。

我需要使用带有 Laravel Passport 的 Vue(带有 Dingo API 的 Laravel 6x)创建一个 SAAS 应用程序。

该应用程序需要是具有角色和权限的多用户。

我读过最好的方法是对 SPA 使用“带有 PKCE 的授权代码授予”。

我遇到的问题是我的 Vue 应用程序设置了代码质询等。请求授权码,然后被定向到 Laravel 登录页面,但是一旦我登录,我就会得到以下屏幕:

授权请求

有没有办法绕过这个?(我尝试使用带有 skipsAuthorization 的自定义客户端,但这似乎不起作用)我使用的是正确的 OAuth 流程吗?

在 Laravel Passport 文档中,有以下内容:

密码授予客户端:虽然这需要一个秘密,所以我不知道如何使用它?隐式授予令牌:现在不鼓励使用,不应使用。

只留下个人访问令牌。但这是正确的“流程”吗?

0 投票
1 回答
961 浏览

python-3.x - '不允许无效请求 URL 查询参数' Django-oauth2 500 错误

前缀:我是 django 的新手。

堆栈:oAuth2 + PKCE 协议、Angular、Django-oauth2-toolkit + REST

继续获得:

没有关于请求内容的错误细节。

当我在 Angular 中使用 pkce 格式的 POST 请求访问 django oauth2 服务器时,例如

不知道出了什么问题。

PS 当请求打印在 django 日志中时,看起来没有任何编码。挑战和验证者正在工作,否则错误将表明如此。