问题标签 [oidc-client]

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 回答
1751 浏览

c# - 从 oidc 客户端获取用户角色

我使用 oidc-client 在我的应用程序中使用 angular 和 asp net core 3.1 进行授权

如何通过 oidc 客户端从 asp net 获取用户角色?

0 投票
0 回答
1412 浏览

single-page-application - 注销未使用带有身份服务器 4 的 oidc 客户端清除所有进程

我们正在使用 Office.context.ui.displayDialogAsync 通过 OAUTH 库(Oidc 客户端)进行身份验证,以下是调查结果。请提供同样的帮助。

  1. 根据附加的代码,我们能够在 taskpane.ts 文件中获取访问令牌作为 messageHandler 中的 args ...
  2. 但是当我登录新的浏览器时,只有安全令牌服务(STS)登录窗口才会打开。
  3. 如果我注销并清除了访问令牌,然后再次尝试以登录用户身份直接登录,而无需打开安全令牌服务 (STS) 窗口。
  4. 一旦我清除了浏览器缓存,然后只有我能够再次获得安全令牌服务 (STS) 窗口...您能否就处理的方案提出建议?我们需要什么吗。

当前情景

displayDialogAsync 第一次作为 STS 登录打开并能够成功登录。但是对于随后的登录,它不会弹出并直接使用令牌加载数据。

预期情景

displayDialogAsync 不仅应该在第一次登录时打开,而且应该为后续登录打开,这意味着如果用户注销并尝试再次登录,它也应该弹出。是否需要清除 displayDialogAsync 的缓存?请帮忙。

auth.ts

任务窗格.ts

注销.ts

0 投票
1 回答
189 浏览

wpf - OIDCClient LogoutAsync 抛出 SemaphoreFullException

我正在从 WPF 应用程序连接到 Identity Server 4,并且正在尝试执行注销。但是,在调用 _oidcClient.LogoutAsync() 时,我的 WpfEmbeddedBrowser 中出现了 SemaphoreFullException。最初我认为也许我不应该使用浏览器注销,但我认为这是不可能的。

这是调用登录和注销的部分:

这是 WpfEmbeddedBrowser:

0 投票
1 回答
123 浏览

angular - 在方法以角度 10 运行之前,构造函数中的承诺未完成

来自 oidc-client 在 Angular 10 构造函数中的承诺需要太长时间才能解决,在构造函数将 de 值放入用户变量之前调用 isLoggedIn 函数。

这是我的代码:

此代码在角度 8 中工作

当我在 isLoggedIn 方法中调用 getUser() 函数时,它起作用了,但我想从构造函数中使用它

0 投票
0 回答
228 浏览

identityserver4 - oidc-client 与不同主机域中的 Identity Server

似乎让所有浏览器都满意是一项具有挑战性的任务,因为它们增加了所有的安全性以及证书的复杂性。

我有一个 SPA (Vuejs)oidc-client.js用于实现 OIDC,与 Identity Server (Identity Server 4) 通信。首先要注意的是,如果我在 localhost 上同时运行客户端和服务器,一切正常。

当我将 Identity Server 部署到我们网络中的 Staging Server 时,事情就出了问题。因此,Idp 的主机名现在与 SPA 的主机名不同(这在生产中是正常的)。

经过大量工作,除了 IE11(是的 IE)之外,我已经完成了所有工作。我必须做几件事才能到达那里,例如:

  • 解决 Chrome 的同站 cookie 问题
  • 创建自签名证书并在 Trusted Certificates 中安装根证书
  • 在客户端添加 Babel 配置代码和 Core.js,使 IE 在 Promise 生效时不会抛出错误

所以,这是一条漫长的道路,但我仍然必须处理这个(见动画): 在此处输入图像描述

我只是不明白为什么 IE 会这样做。
无法使用开发工具查看任何信息。
服务器上的日志不包含任何似乎相关的信息。

有没有其他人在 IE 中看到这些“浏览器症状”。

如果人们认为这会有所帮助,很乐意提供更多信息(代码、日志等)。只是不想在最初的问题中倾倒所有这些,因为很多人不喜欢这样。

这是几个 Fiddler 屏幕截图。第一个来自Chrome在此处输入图像描述 第二个来自IE11在此处输入图像描述

出于某种原因,IE11 一次又一次地调用静默刷新。

我想我可以看到正在发生的事情,但不知道如何解决它。
似乎有 2 次对Authorize端点的调用失败,明显缺少.AspNetCore.Antiforgerycookie。这导致 2 次调用silent-refresh.html

然后,由于某种原因,对 Idp 的基本 url 有一些 GET 请求之王,紧随该请求之后是对具有cookie的Authorize端点的请求。.AspNetCore.Antiforgery

船被设置直,直到下一次呼叫Authorize端点,即下一个循环的开始。

但是,对于Chrome,在用户登录后,对Authorize端点的下一次调用确实包含 cookie。

所以,我想问题是缺少 cookie。

也许这与我在这篇文章中用于解决 Chrome samesitecookie 问题的代码有关?

干杯

0 投票
0 回答
190 浏览

uwp - UWP 上的 IdentityModel 刷新令牌实现

我正在尝试使用实现 IdentityServer4 的 ASP.NET Core Web API 对我的 UWP 应用程序进行身份验证。(geant_type为Password) 所以在app上,我添加了nuget IdentityModel 4.3.1,并编写了如下代码来获取token和刷新token。请注意我在这里使用了System.Net.Http.HttpClient

我的问题是

  1. 何时发送刷新令牌请求?我是否必须手动处理令牌过期?(我需要等到 HttpClient 返回 HTTP 错误 401,然后启动令牌请求。但是所有后续请求会发生什么?我必须将所有请求排队,然后重试等等。似乎很多工作。)

  2. 我看到了一个示例,其中RefreshTokenHandler设置为 HttpClient (System.Net.Http.HttpClient),它说刷新部分是自动处理的。我使用 Windows.Web.Http HttpClient,但无法使用 RefreshTokenHandler。如何使用 Windows.Web.Http HttpClient 自动处理刷新令牌?

谢谢您的考虑。

0 投票
2 回答
229 浏览

angular - 使用 rxjs concat 多次调用 AuthorizeService isAuthenticated() 订阅

我正在使用来自 Visual Studio 模板的默认客户端身份验证服务。

有一个打字稿 AuthorizeService 有一个名为 isAuthenticated 的函数,它调用下面的函数并检查它是否为空。

获取用户函数:

在上述函数上调用 .subscribe 时。订阅被调用了 3 次。大概对于 concat 函数中的每个 observable 。使用上面的 getUser,我希望 subscribe 被调用一次。我将如何实现这一目标?

我尝试将上面的内容转换为返回一个值但由于某种原因没有成功的嵌套承诺,在返回结果后,即使用户存在于会话存储中,它也会返回 resolve(null)

0 投票
0 回答
124 浏览

javascript - IdentityServer 在代码流期间应该返回什么?

我正在尝试使用 Vue.js 中的 oidc-client 库在 SPA 中进行身份验证。我一直在关注本教程:https ://damienbod.com/2019/01/29/securing-a-vue-js-app-using-openid-connect-code-flow-with-pkce-and- identityserver4/和我的代码几乎相同,除了显然将 URL 更改为我自己的本地主机。我之前没有使用过代码流,所以我只是想验证服务器在登录阶段之后实际上应该返回什么。

本质上我的问题是,当应用程序访问 callback.html 时,我收到一个如下所示的错误:

这是由于对 callback.html 的调用而发生的:

到目前为止,一切看起来都很正常 - 我可以单击登录,它会将我重定向到我的 IdentityServer 登录页面,我可以登录并且我可以验证服务器中没有引发错误。我担心的是重定向没有传递足够的信息。本质上,它会完全重定向回 callback.html,但 URL 中没有数据,只有回调。相反,我在请求标头中得到的是一个 Asp.Net 防伪 cookie 和一个包含 returnUrl 的引荐来源网址,其中包含响应类型、重定向 uri、范围等信息。

作为从 IdentityServer 重定向的一部分,我还获得了一个额外的 cookie,该 cookie 被命名为 .AspNetCore.Identity.Application。我认为这是包含身份验证数据的内容,但我只是想确保我到目前为止所拥有的内容是正常的。这是代码流的预期行为吗?

编辑

经过更多调查后,我注意到,虽然我的 callback.html 文件在登录后被重定向时失败,但如果我返回主页并再次单击登录按钮,它会将我重定向回带有查询的 callback.html 页面类似于以下内容的字符串:

之后我被重定向回主页并且我已经成功通过身份验证。

这几乎是我所期望的,也是我在最初的问题中所暗示的。这是在 oidc-client 库上调用 userManager.signinRedirect() 的结果。

我不确定它是如何设法找到该信息的,服务器是否应该首先重定向到该 URL?我有点不清楚这是客户端还是服务器端的期望。

0 投票
1 回答
580 浏览

cookies - OIDC js 库响应 cookie 未存储且未附加用于后续请求

我正在将 authcodeflow 与 PKCE 一起使用。

在前端使用 OIDC js 库,调用 adfs 获取授权码,然后调用我的后端 api。调用 adfs 服务器的后端 api 获取访问令牌,后端 api 将令牌作为 cookie 返回到前端。我可以在响应标头中看到 cookie。但是该 cookie 没有存储在浏览器中,也没有为后续请求添加。我已经尝试使用所有模式的同一个站点 - > Lax、None、Strict 和未设置。这是 OIDC js 库的问题还是阻止 cookie 存储在浏览器中?

更新:以下是我分析的观察结果,因为 OIdc-client-js 没有将请求的标志“withCredentials”设置为 true 的选项。请求中没有发送 cookie,并且跨源请求的响应 cookie 被忽略。此更改被标记为增强,但仍未在其 github 存储库中完成。 https://github.com/IdentityModel/oidc-client-js/issues/1062

这个库有什么方法可以实现吗?或 OIDC js 的任何其他库

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

0 投票
3 回答
254 浏览

angular - 从 angular -oidc-client 中的 app.component 获取数据时 this.user 未定义

oidc-client.js在我的angular项目中使用。

现在用户可以登录和注销,它工作正常。唯一的问题是,当我想在 app.component 中调用服务时,在拦截器中用户未经过身份验证。

auth.service 是:

我写了一个拦截器来为所有请求添加令牌,如下所示:

AuthServiceAuthInterceptorCore nodule.

App.Compoentn我调用这样的服务时,它调用了REST api

当这个调用发生时,我得到了,getDashboards failed: this.user is undefined 但我在另一个组件中准确地调用了这个服务,它工作正常。

调用此服务并获得结果的组件位于它们的模块中。

问题出在哪里?