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

oauth - 在移动应用程序中使用 OAuth 2.0 授权代码流时,浏览器应该向移动应用程序返回授权代码或访问令牌吗?

我们知道:

在里面OAuth 2.0Authorization Code Flow几个实体:

  • 一个)User
  • B) 用户代理 ( Browser)
  • C) 客户端应用程序 ( Mobile App)
  • D) 机密客户(中间人Web Server
  • E)Authorization Server

我们也知道需要保留Web ServerClient Secret返回的/token路线。Authorization ServerAuthorization CodeClient SecretAccess Token

我的问题:

当用户登录到Authorization ProviderbybrowserAuthorization Server返回Authorization Code到重定向 URL(到)时,到底应该Web Server执行以下哪一种方式?为什么?

X)

  1. Web Server应该返回Authorization Code作为对Browser适当深度链接格式的响应。
  2. Browser打开Mobile App并传递给Authorization Code
  3. 使用PKCEMobile App将发送到(通过调用 API)并发送请求以获取并将返回到.Authorization CodeWeb ServerWeb ServerAuthorization ServerAccess tokenMobile App

是)

  1. Web Server应该Access Token通过接收到的来获取并以深度链接格式Authorization Code返回Access Token给浏览器的响应。
  2. Browser打开Mobile App并传递给Access Token它。

我在这里看到了下面的图表:

在此处输入图像描述

并认为正确的方式是X,因为在X方式中,无需深度链接即可直接Mobile App获取,并且X是安全的。但我需要一份有效的文件并在答案中参考官方文件。Access TokenAPIBrowser

我想确定......哪一个是正确的方法?X还是Y?

  .

0 投票
1 回答
1761 浏览

java - 在 Java 中正确比较 code_verifier 和 code_challenge

我正在使用 passport-oauth2(passportjs.org 和https://github.com/jaredhanson/passport-oauth2/blob/master/lib/strategy.js)在 nodejs 应用程序中进行 OAuth2+PKCE 集成。

它进行身份验证的后端是用 Java 编写的。

问题是我似乎无法解码-> 散列 code_verifier 以正确匹配来自 passport-oauth2 的 code_challenge。

我知道来自护照的 Base64 编码已生成为 URL 安全(无填充、无包装、替换+or /),所以我使用的是 URL 解码器:

然后我使用 commonsDigestUtils生成解码验证器的 SHA256 并将其与挑战进行比较。所以整个事情看起来像这样:

例子:

这个代码验证器:5CFCAiZC0g0OA-jmBmmjTBZiyPCQsnq_2q5k9fD-aAY 应该匹配这个代码挑战:Fw7s3XHRVb2m1nT7s646UrYiYLMJ54as0ZIU_injyqw一旦两者都经过 Base64-url 解码并且验证器已经过 SHA256 散列,但事实并非如此。

我究竟做错了什么?

0 投票
0 回答
191 浏览

javascript - SPA 应用程序如何处理 OIDC 回调?

我正在尝试让我的 SPA 应用程序支持 OAuth2 的 Open ID Connect (OIDC)。我没有做隐式流程。我正在使用 Proof Key for Code Exchange ( PKCE ) 执行授权代码流程。

有一个 javacript 库可以为 OIDC 完成大部分繁重的工作。它被称为oidc-client-js

它有 2 个登录选项。

  • 重定向:将浏览器重定向到登录页面。之后它将浏览器定向到 OIDC 回调页面。
  • 弹出:弹出一个加载登录页面的新浏览器窗口。之后弹出的窗口加载回调页面。

我遇到的问题是我最终使用任何一种方法至少加载了两次我的 SPA 应用程序。

  • 对于重定向: SPA 应用程序加载,我调用重定向到登录屏幕。用户登录后,它会加载我的回调页面。再次加载应用程序。

  • 对于弹出窗口: SPA 应用程序加载,我进行弹出调用以登录。使用登录后,它会在弹出的窗口中再次加载我的 SPA 应用程序(用于回调)。

将授权代码流与 PKCE 一起使用的 SPA 应用程序的预期流程是什么?

0 投票
1 回答
332 浏览

angular2-nativescript - 如何通过 PKCE 将 NativeScript Angular android 移动应用程序与 Okta Auth 流程集成

我有一个 NativeScript Angular android 应用程序,我需要与 Okta 集成。我能够成功地将我的 Angular Web 应用程序与 Okta 集成,但是(因为我不是移动应用程序开发人员)我发现很难将其与移动应用程序集成在一起。我尝试浏览 Okta 官方网站上提供的文档(https://developer.okta.com/docs/concepts/auth-overview/#choosing-an-oauth-2-0-flow)感觉建议是使用 PKCE 实现授权代码,我需要在下面:

1.移动应用程序中的嵌入式浏览器显示Okta登录页面。2.某种本地服务器,可以接收来自 Okta 的带有身份验证代码的回调,并将回调中收到的身份验证代码与应用程序 api 服务集成。

你认为这是正确的思路吗?

如果是,我将如何在移动应用程序中获取 Web 服务器以及它的地址(会是本地主机吗?)以接收来自 Okta 的回调?

是否有任何 JavaScript 库可以轻松地与 NativeScript 代码集成来做到这一点?

我遇到了https://github.com/openid/AppAuth-JS但不确定如何集成它。

谢谢

0 投票
2 回答
75 浏览

oauth-2.0 - 通过在本机应用程序中使用 PKCE 如何保护 client_id

客户端二进制文件中提供的机密 (client_secret) 不能被视为机密 (rfc7636)。

所以我想将授权代码流与 PKCE 一起使用。这是为不使用客户端密码的客户端设计的。我了解PKCE确保客户端对于原始授权码请求和access_token请求相同。

问题:

  • 客户本身如何得到保护?
  • 我同意客户(id)。如果恶意客户端使用我的 client_id 并管理用户登录怎么办。该恶意客户端是否“同意”?
0 投票
1 回答
1056 浏览

c# - Xamarin.forms 身份验证 PKCE

我有一个 Identity server 4 应用程序,我正在尝试使用我的 Xamarin.forms 应用程序使用 PKCE 登录。我不断从身份服务器收到一个我以前从未见过的错误。code_challenge is missing我猜我使用了错误的授权类型,但我为 Xamarin 找到的所有文档都说我应该使用这个。

如何将 Xamarin 连接到 Identity server 4?

错误

身份服务器中的客户端 ID

xamarin 代码

如果我 RequirePkce = true,从身份服务器中的客户端中删除,我将不再收到相关错误。据我所知,Xamarin.auth 还不支持 PKCE。这意味着我要么必须禁用它,要么自己实现它。

如何在启用 PKCE 的情况下从 XAmarin 表单登录到身份服务器 4。

0 投票
1 回答
93 浏览

oauth - 为什么 OAuth2.0 安全最佳当前实践草案说所有身份验证授权类型的实现都应该使用 PKCE?

当前 OAuth2.0 安全主题的最佳实践草案在第 3.1.1 节中有以下内容:

“使用授权授予类型的客户端必须使用 PKCE [RFC7636] 以便(在授权服务器的帮助下)检测并防止将授权代码注入(重放)授权响应的尝试。......注意:虽然到目前为止 PKCE被推荐作为一种保护原生应用程序的机制,这个建议适用于所有类型的 OAuth 客户端,包括 Web 应用程序。”

  • “使用授权授权类型的客户端必须使用 PKCE ... 来检测和防止尝试将(回复)授权代码注入授权响应。”
    • PKCE 究竟如何帮助“检测”回复验证码的尝试?它的 RFC中没有任何内容表明它比OAuth2.0 RFC更好地处理检测,如果请求包含已使用的身份验证代码,则必须拒绝请求。
    • PKCE 究竟如何帮助“防止”对具有处理身份验证代码请求和重定向的后端的 Web 应用程序的授权代码重放攻击?我在假设身份验证代码请求和重定向都发生在 TLS 的情况下进行操作。有什么机会(以及它是如何工作的)可以重播身份验证代码?

需要注意的重要一点:

“...此建议适用于所有类型的 OAuth 客户端,...”捕获具有处理身份验证代码请求和访问令牌交换的后端组件的 Web 应用程序。因此,我们不是在谈论以前可能使用过隐式授权类型的 Web 应用程序;我们正在讨论可以使用授权授予类型的 Web 应用程序。

0 投票
1 回答
5229 浏览

java - 如何在 PKCE 中使用 Keycloak

我正在尝试使用 pkce 和 authorization_code 流从 keycloak 获取令牌,但没有成功。

请求参数(来自邮递员):

密钥斗篷日志:

0 投票
1 回答
53 浏览

database - 理解和实现 OAuth2 授权服务器

我正在尝试为 oAuth2 架构实现后端以允许对移动应用程序进行授权。最佳实践似乎是PKCEauthorization code流程一起使用。这降低了client_secret在应用程序本身上存储 a 的风险。

我一直在看这张图以供参考:

在此处输入图像描述

  • 网上似乎有很多示例显示 db 的 db Auth0 tenant,但似乎并没有太多合并 PKCECode ChallengeCode Verifier. 和all是如何相互关联的,它们是如何在图表的第 8 阶段验证Code Challenge的?Code VerifierAuthorisation CodeAuth0 Tenant
  • 这就引出了我的下一个问题,即设计一个关系数据库来保存这些信息。尝试在 Auth0 租户上声明授权的用户一次只会Code Challenge发送一个,那么此信息是否可以保存在用户表中?我一直在寻找这个脚本的想法。
  • 在设计这个方面,Auth0 Tenant server从中分离出来有什么好处authentication server?我计划实施 Auth0 Tenant 来对应用程序进行身份验证(我在这个意义上拥有它)。

将来,我计划将其他社交媒体Auth0 Tenants作为身份验证。

参考:

0 投票
0 回答
218 浏览

asp.net - 使用 IdentityServer4 构建 STS,向 AngularJS 客户端提供 JWT 令牌,保护 .NET API;为什么授权失败?

因此,我正在构建一个新的安全令牌服务,以取代基于 IdentityServer3 的旧解决方案。我希望使用 PKCE 流进行身份验证,到目前为止,我已经为新服务配置了证书、身份资源、测试用户、API 资源和客户端。

身份资源

用户

API 资源

客户

AngularJS 客户端正在使用 oidc-client.js。这与我的令牌服务之间的通信似乎工作正常。我得到了从 IdentityServer4 返回的有效 JWT 令牌,其中包含我期望的数据。我的目标是将访问令牌中包含的用户 ID 传递给 API,因此它可以确保通过专门为检查用户是否具有“超级”角色而构建的外部库对用户进行身份验证,并使用用户 ID。

客户端像这样配置 OIDC UserManager:

现在,这是一个旧代码库 - 但在我看来,当从客户端调用 API 时 - 访问令牌被放入使用 $httpProvider.interceptors 的 push() 调用中的授权标头中,就像这样..

在记录配置对象时,我可以验证 Authorization 标头是否确实包含我需要的访问令牌。但是,当使用没有必需输入参数的简单 GET 请求调用 API 时 - 受操作方法上的 [Authorize] 属性保护,我得到 401 Not Authorized 响应。API 是这样配置的,在 Startup 类中..

现在,在控制器构造函数中为我试图命中的端点设置一个断点,我可以看到没有用户数据、声明等被拾取。我猜这与旧的 AngularJS 客户端如何构建和传递这些请求有关,但到目前为止我被困住了!

对此问题的任何见解和指导将不胜感激 - 并感谢您阅读我的长期混乱!