问题标签 [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-2.0 - 清除本地状态后,授权码流程如何记住用户?
给定一个通过 Microsoft 的msal.js使用 Oauth 2.0授权代码流的应用程序,我通过提供我的凭据登录。然后我完全清除浏览器的状态、缓存、本地/会话存储,并刷新页面,以便单页应用程序不知道我已登录,但我仍然使用 Microsoft 后端登录。
当我启动另一个登录时,它可以静默进行,无需重新询问我的凭据。
显然,通过对 的请求https://login.microsoftonline.com/redacted/oauth2/v2.0/token
,即使我清除了 js 内存和所有缓存/会话/本地存储,Microsoft 后端也可以将我认证为同一用户
此请求如何获取有效代码/ code_verifier以发送到授权服务器,以便在不重新输入凭据的情况下为用户取回访问令牌?
更多细节:
以下确实需要我重新输入我的凭据(正如我所期望的那样):
- 私人/隐身标签
- 关闭浏览器并重新打开
- 在同一台计算机上使用不同的浏览器
以下不需要我重新输入我的凭据,可以静默登录:
- 在清除本地状态的新选项卡中进行身份验证
- 在清除本地状态的同一浏览器的新窗口中进行身份验证
- 刷新选项卡并清除本地状态
我希望这 3 个“非”场景需要凭据,但它们不需要。如果浏览器不保持任何本地状态,如何进行身份验证?
angular - 使用 Angular SPA 的 PKCE 的 OKTA 授权代码流
我正在尝试使用 okta 作为 IAM 在 Angular 中实现身份验证。我想用 PKCE 实现授权代码流,因为隐式流会带来安全漏洞,暴露地址栏中的访问代码和 id 令牌。有人可以帮助我实现示例吗?
reactjs - 选择 oauth2 flow spa 应用程序
我们正在构建一个带有 SPA 客户端 (reactjs) 和 nodejs 服务器的全栈应用程序,它们在 API Rest 中发布资源。
我需要使用 azuread 或 keycloack 等身份提供者对用户进行身份验证。
我想使用 OpenIdConnect 协议(基于 Oauth2),但我不知道我需要哪个流。
我读到 PKCE 的授权代码最适合 SPA,但我不明白为什么?如果我获得 access_token,我可以在哪里将其保存在我的 SPA 中?保存这个令牌是否安全?
您为这种架构推荐哪种流程?
xamarin.forms - 使用 PKCE OAuth 和 .NET API 从 Xamarin Forms 访问 Dropbox - 解决方案
可以说,在 Xamarin Forms 中实现 Dropbox 支持很有趣,尤其是使用更安全的 PKCE OAuth 流,这需要深度链接,因为 WebView 是不安全的。
对于任何像我一样苦苦挣扎的人,工作代码如下所示,包括共享代码和 Android 代码。我不需要实现 iOS 端,因为我在那里使用 iCloud 而不是 Dropbox,但这应该很简单。
您可能希望将 ActivityIndicator 添加到调用页面,因为它在授权期间会弹出和弹出视图。
注意:虽然 Xamarin 不正式支持 Dropbox .NET API,但可以使其工作,如此处所示。
编辑 2021 年 9 月 18 日:添加代码以 (1) 处理用户拒绝接受对 Dropbox 的访问和 (2) 授权后关闭浏览器的情况。剩下的问题:每次我们授权时,都会在浏览器中添加一个标签 - 不知道如何克服它。
php - 将 PKCE 与 laravel/passport 一起使用总是返回错误:“invalid_client”消息:“客户端身份验证失败”
我正在使用 laravel/passport v9.4.0 和 laravel 7 在我的 Nuxt SPA 上实现身份验证。为了安全起见,我选择使用PKCE流,但由于某种原因,我只从服务器收到此响应:
我使用以下命令创建客户端:
我可以在数据库中看到它,所以我知道我使用了正确的客户端 ID。我正在使用@nuxt/auth,我的授权网址如下所示:
我也在使用stancl/tenancy包,因为它是一个多租户应用程序,但这不应该是一个问题,因为查询看起来都不错。根据本教程,我也尝试过不使用@nuxt/auth,但结果仍然相同。
护照和laravel 7不兼容吗?laravel 7 文档详细说明了如何将 PKCE 与护照一起使用,因此不太确定这里有什么问题。
.net - 使用授权代码流和 PKCE 保护 .Net Core Web API
我有一个位于公司网络中的 .Net 核心 Web API,它是一个独立的服务,将被网络中的其他应用程序使用。Web API 非常简单,端点很少。但是,我想限制对此 Web API 的访问。仅允许给定的应用程序集访问此 Web API。在我们公司内部,我们有充当身份提供者服务器的身份验证和授权服务,我们必须使用此服务来获取访问令牌等。我们不能创建自己的身份服务器来生成令牌。在我们的设计阶段,我们确定使用 PKCE 的授权代码流将是一个理想的实现。
我们的身份提供者已经登录了一个测试客户端 ID 并使用 PKCE 配置了身份验证代码流,之后当我配置 .net 核心 web api 时,我意识到我们需要为用户登录提供一个重定向 url,这是一个混淆点,因为这是一个 web api,没有登录页面。我想说的是,当我们在 Auth Code 流程的第一步中获取授权代码时,我不清楚重定向将如何工作,因为没有登录页面可以在 Web API 中重定向,我的意思是在获取身份验证代码时,必须提供重定向 uri,用户将在其中输入用户 ID 并通过,但这是一个 Web API,没有用户/密码,只有另一个客户端应用程序正在尝试使用客户端 ID 访问。所以我的问题是如何在 Web API 环境中使用 OIDC PKCE,我确信这是可能的,但我没有找到任何相关文件。任何 .Net 核心代码示例将不胜感激。不,我们不能使用 Client Secret 或隐式工作流。
期待您的回复。
谢谢你。
angular - 通过 PKCE 实施安全地存储具有 OKTA Auth 代码流的 SPA 的客户端 ID
在使用 PKCE for Angular 应用程序实现 Auth 代码流时,我们是否需要安全地存储客户端 ID和Issuer?如果是这样,怎么办?因为如果我将它存储为环境变量并动态生成 environment.ts 文件(包含客户端 id和issuer),这些值仍然可以在浏览器中访问,因为可以在浏览器中访问 prod build 中的环境文件。
暴露客户 ID 和发行人是否存在安全威胁?
oauth-2.0 - 使用 PKCE 的授权代码流如何比没有 client_secret 的授权代码流更安全
很可能我对这个主题有误解,或者在实施过程中遗漏了一些东西
我浏览了 Auth0 的文档,通过端点而不是 SDK 创建使用 PKCE 的授权代码流,我看到我们提出了如下挑战和验证器(来自 auth0 doc):
和
然后我们将挑战传递给授权端点,如下所示(来自 auth0 doc):
并将代码和验证器传递给令牌端点,如下所示(再次来自 auth0 doc):
实现是一件相当简单的事情,但我不明白另一个应用程序如何不能进行相同的挑战和验证并模拟我们的应用程序?
我以为我们不使用 client_secret 作为授权代码流,暴露的 client_secret 使黑客更容易尝试生成令牌和虚假模拟我们的应用程序,为什么他们不能简单地模拟挑战和验证者?
blazor - ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect blazor 示例无法检索元数据
我试图让ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect模块工作。该示例编译但不起作用,因为元数据请求因违反 CORS 而被切除。我正在使用提供的样本。服务器元数据看起来不错,但客户端被拒绝。
angular - 使用 Angular-oauth2-oidc 在 Angular 中使用 PKCE 的授权代码流
我想在我的 Angular SPA 中使用带有 PKCE 的代码流,为了方便我使用这个库:angular-oauth2-oidc
如果您单击该链接,则表示通过此配置,您将使用带有 PKCE 的代码流:
当用户单击登录时,我使用此命令启动流程:
这有效,我收到了访问权限和 ID 令牌,但是我如何确定我使用的是带有 PKCE 的代码流,而不仅仅是没有 PKCE 的普通代码流?代码挑战和验证器的创建和存储是否都由库为我处理?有没有办法停止该过程并查看授权码或代码质询?
这可能是一个奇怪的问题,但我只想确定它使用的是 PKCE ......