问题标签 [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.
oauth - 在移动应用程序中使用 OAuth 2.0 授权代码流时,浏览器应该向移动应用程序返回授权代码或访问令牌吗?
我们知道:
在里面OAuth 2.0有Authorization Code Flow几个实体:
- 一个)
User - B) 用户代理 (
Browser) - C) 客户端应用程序 (
Mobile App) - D) 机密客户(中间人
Web Server) - E)
Authorization Server
我们也知道需要保留Web Server和Client Secret返回的/token路线。Authorization ServerAuthorization CodeClient SecretAccess Token
我的问题:
当用户登录到Authorization Providerbybrowser并Authorization Server返回Authorization Code到重定向 URL(到)时,到底应该Web Server执行以下哪一种方式?为什么?
X)
Web Server应该返回Authorization Code作为对Browser适当深度链接格式的响应。Browser打开Mobile App并传递给Authorization Code它- 使用PKCE
Mobile App将发送到(通过调用 API)并发送请求以获取并将返回到.Authorization CodeWeb ServerWeb ServerAuthorization ServerAccess tokenMobile App
是)
Web Server应该Access Token通过接收到的来获取并以深度链接格式Authorization Code返回Access Token给浏览器的响应。Browser打开Mobile App并传递给Access Token它。
我在这里看到了下面的图表:
并认为正确的方式是X,因为在X方式中,无需深度链接即可直接Mobile App获取,并且X是安全的。但我需要一份有效的文件并在答案中参考官方文件。Access TokenAPIBrowser
我想确定......哪一个是正确的方法?X还是Y?
.
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 散列,但事实并非如此。
我究竟做错了什么?
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 应用程序的预期流程是什么?
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但不确定如何集成它。
谢谢
oauth-2.0 - 通过在本机应用程序中使用 PKCE 如何保护 client_id
客户端二进制文件中提供的机密 (client_secret) 不能被视为机密 (rfc7636)。
所以我想将授权代码流与 PKCE 一起使用。这是为不使用客户端密码的客户端设计的。我了解PKCE确保客户端对于原始授权码请求和access_token请求相同。
问题:
- 客户本身如何得到保护?
- 我同意客户(id)。如果恶意客户端使用我的 client_id 并管理用户登录怎么办。该恶意客户端是否“同意”?
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。
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 应用程序。
java - 如何在 PKCE 中使用 Keycloak
我正在尝试使用 pkce 和 authorization_code 流从 keycloak 获取令牌,但没有成功。
请求参数(来自邮递员):
密钥斗篷日志:
database - 理解和实现 OAuth2 授权服务器
我正在尝试为 oAuth2 架构实现后端以允许对移动应用程序进行授权。最佳实践似乎是PKCE与authorization code流程一起使用。这降低了client_secret在应用程序本身上存储 a 的风险。
我一直在看这张图以供参考:
- 网上似乎有很多示例显示 db 的 db
Auth0 tenant,但似乎并没有太多合并 PKCECode Challenge和Code Verifier. 和all是如何相互关联的,它们是如何在图表的第 8 阶段验证Code Challenge的?Code VerifierAuthorisation CodeAuth0 Tenant - 这就引出了我的下一个问题,即设计一个关系数据库来保存这些信息。尝试在 Auth0 租户上声明授权的用户一次只会
Code Challenge发送一个,那么此信息是否可以保存在用户表中?我一直在寻找这个脚本的想法。 - 在设计这个方面,
Auth0 Tenant server从中分离出来有什么好处authentication server?我计划实施 Auth0 Tenant 来对应用程序进行身份验证(我在这个意义上拥有它)。
将来,我计划将其他社交媒体Auth0 Tenants作为身份验证。
参考:
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 客户端如何构建和传递这些请求有关,但到目前为止我被困住了!
对此问题的任何见解和指导将不胜感激 - 并感谢您阅读我的长期混乱!

