问题标签 [identitymodel]

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 投票
0 回答
268 浏览

asp.net-core - 无法让 AddAccessTokenManagement() 使用来自 AddDistributedSqlServerCache() 的缓存服务

我正在尝试实现一个后端换前端 .NET Core 3.1 项目,其中从 Identity Server 检索到的令牌存储在 SQL 缓存中。BFF 基于SpaHost-GitHub的实现。在项目中,我使用了应管理令牌生命周期和缓存的IdentityModel.AspNetCore 。

为了将令牌存储在缓存中,表BffTokenCache是使用以下模式创建的

在我删除的 SpaHost 项目的Startup.cs类中

并将其替换为

为了验证连接字符串和表是否适用于缓存服务,我在Startup.csConfigure()类的函数中添加了一行代码来获取注入的对象并将值写入表中。那行得通,但是当我运行我的项目时,我从来没有看到任何令牌被写入缓存。我希望一旦用户通过身份验证,IdentityModel.AspNetCore库就会将令牌写入表中。IDistributedCache

我尝试将services.AddDistributedSqlServerCache()线路移动到调用之前和之后,AddAccessTokenManagement()以防有人可以覆盖调用AddClientAccesTokenManagement()函数中的调用,AddDistributedMemoryCache()但这似乎并不重要。

--UPDATE 我对 IdentityModel.AspNetCore库的理解似乎不正确。只有客户端信息似乎是一个可缓存的对象,此时我没有这样做。当请求刷新令牌而不是缓存时,用户令牌数据被添加到字典中。所以我原来的问题是无关紧要的。

0 投票
1 回答
93 浏览

.net - 如何在 .NET 中读取 jwt 令牌?

我想检查一个 jwt 令牌只是为了在内容上达到峰值。我没有验证它的私钥,但我仍然想探索内容。当我尝试使用时,System.IdentityModel.Tokens.Jwt我没有按预期得到索赔。我可以在 jwt.io 上看到令牌和有效负载,但在我尝试代码时看不到。我使用的代码是这样的:

对于令牌,我让它返回 0 个声明。我希望能够以与我在 jwt.io 上看到的相同的方式访问令牌的有效负载,但不知道如何。我究竟做错了什么。

0 投票
1 回答
99 浏览

winforms - SSO 不适用于 IdentityModel.OidcClient

我正在将 OIDC 登录添加到 WinForms 应用程序。我使用 IdentityModel.OidcClient 库设置了应用程序,并从他们的 WinForm 示例中提取了样板代码。OIDC 成功显示登录表单,执行 MFA,然后我取回令牌。

但是,如果我关闭应用程序并再次打开它,我必须再次进行身份验证。通常,浏览器中的 SSO 会话允许我绕过这一步。似乎 OidcClient 正在使用一个浏览器会话,该会话在应用程序关闭时被破坏并且不在应用程序之间共享。

如何配置我的应用程序以使用 SystemBrowser 或其他浏览器,这些浏览器将在执行之间和/或为使用此组件的不同应用程序维护这些 SSO cookie。

提前致谢。

0 投票
3 回答
503 浏览

c# - 添加新包会破坏 .NET 5 应用程序

我一直试图弄清楚为什么我的控制台应用程序在我引入一个新包的那一刻就失败了。使用IdentityModel.OidcClientandMicrosoft.AspNetCore.Server.Kestrel 有效,但添加Microsoft.Extensions.Configuration.Json时会引发异常。我也没有在代码中引用新包,我只是将它添加到项目中。

重现步骤:

  1. 克隆https://github.com/IdentityModel/IdentityModel.OidcClient.Samples.git

  2. 将 NetCoreConsoleClient升级到 .NET 5(更新包)。

  3. 删除Serilog.Sinks.Literate过时的包。

  4. 在 Program.cs 中删除.WriteTo.LiterateConsole对 SeriLog 的调用并添加using IdentityModel.Client.

  5. 为类中的方法添加CancellationToken cancellationToken = new CancellationToken()参数。接口的签名已更改,新方法应如下所示:InvokeAsyncSystemBrowserIBrowserpublic async Task<BrowserResult> InvokeAsync(BrowserOptions options, CancellationToken cancellationToken = new CancellationToken())

  6. 运行应用程序并使用 alice/alice 登录。获取token成功。

  7. 添加包Microsoft.Extensions.Configuration.Json

  8. 运行应用程序。Object reference not set to an instance of an object它现在在写入 http 响应时抛出异常。

LoopbackHttpListener.SetResult写入响应时发生异常:ctx.Response.WriteAsync("<h1>You can now return to the application.</h1>");

为什么添加一个包,会对运行时产生如此大的影响?

项目文件:

完全例外:

解决方案

摆脱Microsoft.AspNetCore.Server.Kestreland Microsoft.Extensions.Configuration.Json,将 SDK 更改为Microsoft.NET.Sdk.Web,一切正常。感谢@JHBonarius 为我指明了正确的方向。

0 投票
1 回答
280 浏览

c# - 如何在 ac# webapi 中使用 IdentityModel.OidcClient 来验证和验证从支持 openid 连接的活动目录服务生成的令牌?

我有一个 c# 中的 webapi 和一个前端 Angular 应用程序。Angular 应用程序正在调用活动目录服务(例如 azure ad)以获取访问令牌。在随后的 webapi 调用中,web api 应用程序需要验证访问令牌。

到目前为止,我的 webapi 一直在使用 Microsoft.Owin.Security jwt 令牌验证。我想用 IdentityModel.OidcClient 替换 Microsoft.Owin.Security (因为这是经过认证的 c# openid 连接库)。请帮助我了解如何使用 OidcClient 框架来验证令牌。

0 投票
2 回答
6954 浏览

c# - IDX10503:签名验证失败。托肯没有孩子。尝试的键:'System.Text.StringBuilder'

我有以下 JWT 令牌,

这是使用生成的,

获得令牌后,我正在使用以下代码进行验证,

但我得到以下错误,

0 投票
0 回答
42 浏览

google-oauth - Google refreshtoken 401 错误:未经授权 - android

我正在使用 microsoft 身份模式 oidc 客户端访问我的 android 上的 google fit 数据。登录功能按预期工作,它显示登录和同意页面并提供 accesstoken、refreshtoken 等,但是当我尝试刷新令牌时它会抛出 401 未经授权错误。

它只发生一次,如果我再次尝试登录,那么 refreshtoken 工作正常。这是 refreshtoken 调用第一次抛出 401 错误。

有人可以请教吗?我查看了 [this][1] 问题和。试图传递access_type=offlinerefreshtoken 调用但它没有帮助。

登录:

登录:await CreateOAuth().LoginAsync(new LoginRequest());

RefreshTOken(): = await CreateOAuth().RefreshTokenAsync(refreshTokennew Dictionary<string, string> { { "access_type", "offline" }});//-> 第一次失败(401 - 授权),然后如果您断开连接并再次登录,则此功能每次都有效。

请帮忙。[1]:Google API refreshToken() 给出错误“未经授权的客户端”

0 投票
1 回答
69 浏览

.net-5 - 使用从 Cloud Foundry CredHub 检索的值配置 IdentityModel 的 ClientCredential

简短的问题陈述:
如何从 Cloud Foundry CredHub 获得价值以在内部使用ConfigureServices(IServiceCollection services)

现有条件:
假设我有一个SystemConfig用于保存配置值的类。我在“开发”阶段使用 json 文件和 dotnet 机密的组合来存储这些值,并且可以通过以下方式检索它们

在“SIT”阶段,我使用 Pivotal Cloud Foundry 来托管应用程序,并使用 ConfigServer - CredHub 的组合来存储配置值。CredHub 中的值可以通过内部Configure(IApplicationBuilder app)检索

当我需要从IdentityModel.AspNetCore内部配置访问令牌管理时,就会出现问题ConfigureServices

该方法AddAccessTokenManagement只能在内部使用,ConfigureService(IServiceCollection services)但同时我还没有来自 CredHub 的值,因为它们是在内部检索的Configure(IApplicationBuilder app)
也不推荐使用 ,services.BuildServiceProvider()因为它会创建可能导致意外错误的单例服务的额外副本。

所以问题归结为:

  • 我们可以在里面检索 CredHub 值ConfigureService(IServiceCollection services)吗?
  • 如果不可能,那么我们可以以某种方式设置AddAccessTokenManagement在里面Configure(IApplicationBuilder app)吗?
0 投票
1 回答
144 浏览

asp.net-core - 使用 IdentityModel.AspNetCore 时的授权标头

我正在使用IdentityModel.AspNetCore客户端凭据流访问受保护的 api。在我的启动中,我在下面进行了配置。

在我的服务中,我正在使用一个客户端实例IHttpClientFactory

这段代码运行良好,我可以访问 API。我的问题是,当我扩展从 clientFactory 获得的客户端实例时,其中的 Authorization 标头为空。所以我很困惑这是如何工作的。我预计它将使用不记名令牌详细信息设置授权标头值。那么这是如何工作的呢?IdentityModel 如何设置不记名令牌?(API 正确授权,好像我更改了客户端密码,它会给出 401)

0 投票
0 回答
219 浏览

c# - 如何使用 IdentityModel.OidcClient 通过 refresh_token 获取 LoginResult?

我使用 IdentityModel.OidcClient 来获取 access_token。在浏览器中登录后,我调用 OidcClient.ProcessResponseAsync() 以使用 RefreshTokenHandler(以及令牌、时间戳、用户/声明)获取 LoginResult。现在我使用 RefreshTokenHandler 创建一个 HttpClient 来调用我的 WebApis。

每次 access_token 过期时,WebApis 都会返回 HTTP 状态 401(未授权)。RefreshTokenHandler 使用 refresh_token 创建一个新的 access_token 并重复请求。到目前为止一切正常。

现在我坚持 refresh_token,重新启动我的应用程序,并希望使用 refresh_token 获得一个干净的 LoginResult 和 RefreshTokenHandler(以及令牌、时间戳、用户/声明)来创建一个 HttpClient。

我怎样才能做到这一点?有没有办法不分叉 IdentityModel.OidcClient。