问题标签 [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.
.net-core - 为 .NET Core 3.1/IdentityModel 5.1 使用 ResourceOwnerPassword 流
我正在玩 IdentityServer4。其中一部分我正在尝试使用 IdentityModel 5.1.0 构建客户端并尝试使用以下可用的代码here
但这给了我以下错误。
错误 CS1729:“TokenClient”不包含采用 3 个参数的构造函数
从文档看来,该页面仅适用于 Core 1.0。当我将文档更改为 3.1.0 时,我得到
抱歉 此页面尚不存在
这是否意味着ResourceOwnerPassword
.NET Core 3.1 不支持流?
windows - 如何从日志中破译 StackTrace?
我正在查看 Kusto 日志
我可以获得哪些信息?来自先前位置的堆栈跟踪结束是什么意思?
c# - 刷新令牌不再有效时强制登录
我有一个使用 OpenID Connect 和 Identity Server 4 的 ASP.net core 3.1 MVC 应用程序。我正在使用 IdentityModel 自动刷新应用程序中的访问令牌。配置如下:
我有一个控制器,它将从使用该身份服务器保护的下游 API 中提取数据。我的 MVC 客户端请求范围 api1 和 offline_access 以获取刷新令牌。这些令牌存储在 cookie 中,因为SaveTokens = true
是在服务上设置的。
一切正常。当我登录时,我得到了访问令牌和刷新令牌。我的访问令牌持续了大约 20 分钟,当它过期时,它使用刷新令牌调用令牌端点以获取新的访问令牌 + 刷新令牌。
我不确定如何处理的一种情况是我的刷新令牌生命周期已过。如果我将刷新令牌生命周期设置为 8 小时,但我的 MVC 会话仍处于活动状态,它将尝试获取新的刷新令牌并失败。
我可以处理的 OpenID 连接中间件中是否有一些事件可以检测到它何时无法获取此刷新令牌,并且我可以使用它以某种方式再次强制登录(或至少往返身份服务器/授权端点)?
asp.net - 身份模型 invalid_client
我刚刚开始了解身份模型,并一直在查看此处的示例 - https://identitymodel.readthedocs.io/en/latest/client/token.html
我正在查看最简单的示例 - 使用 client_credentials 授予类型请求令牌 - 并使用示例代码,我将一些简单的 vb.net 放在一起进行测试和试验。
我遇到的问题是我只收到了 invalid_client 错误消息。
我敢肯定,我错过了一些显而易见的事情,但如果有人能指出我正确的方向,那将非常有帮助。
c# - 使用 IdentityModel/IdentityServer4 验证会话仍然有效
我无法让 IdentityModel 验证令牌是否仍有有效会话。这是我的客户代码。_http
是 的一个实例HttpClient
。
不要在这种情况下判断我使用用户名/密码。它是一个受信任的应用程序,我首先从更简单的场景开始,然后计划继续使用混合模型。
c# - IdentityModel 实施:如何在到期日或之后验证(和刷新)access_token?
背景故事:我正在尝试将使用 .NET 5 (MVC) 的新客户端应用程序与现有的 IdentityServer4 链接起来。IdentityServer4(简称 IS4)既用于对客户端进行身份验证,也用于提供声明和角色以及 API(单独的 webapp)所依赖的 access_token 以在后端系统上请求数据。在新客户端上,我使用 IdentityModel 包来处理身份验证和授权。到目前为止,我已经管理了身份验证和授权工作,但我遇到了有关 access_token 到期日期的问题。
我目前已将 IS4 中的客户端配置为具有以下功能。如果该行显示“(默认)”,则表示它是 IdentityModel/IS4 建议或设置的默认值:
- IdentityTokenLifetime:300s / 5m(默认)
- IdentityAccessToken:300s / 5m(缩短以允许我测试)
- AuthorizationCodeLifetime:300s / 5m(默认)
流程 第一个例子:
- 用户浏览网页,并被重定向到 IS4 登录。
- 用户填写 user/pass 并成功验证,并被重定向回 Web 应用程序的安全部分。
- 当用户点击安全网页时,会使用用户的 access_token 向外部 api 发出 api 请求以获取用户的数据。
- 请求返回用户的数据,以及包含该数据的网页。
- 工作完美。
第二个例子:
- 用户浏览网页,并被重定向到 IS4 登录。
- 用户已经使用 cookie 通过 IS4 进行了身份验证,因此成功地进行了身份验证,并被重定向回 Web 应用程序的安全部分。
- 当用户点击安全网页时,会使用用户的 access_token 向外部 api 发出 api 请求以获取用户的数据。
- 请求返回用户的数据,以及包含该数据的网页。
- 工作完美。
第三个例子:
- 用户在网页上等待 15 分钟,然后刷新页面。
- 用户已登录网站,因此不会重定向到 IS4。
- 由于用户刷新,用户点击安全网页,使用用户的 access_token 向外部 api 发出 api 请求以获取用户数据。
- 请求返回空,因为 access_token 已过期(10 分钟前)
- 悲伤的笑脸:'(
第四个例子:
- 以下示例三:用户看到错误并重新启动浏览器。
- 用户浏览网页,并被重定向到 IS4 登录。
- 用户已经使用 cookie 通过 IS4 进行了身份验证,因此成功地进行了身份验证,并被重定向回 Web 应用程序的安全部分。
- 当用户点击安全网页时,会使用用户的 access_token 向外部 api 发出 api 请求以获取用户的数据。
- 请求返回用户的数据,以及包含该数据的网页。(因为 access_token 是新生成的,由于新的 IS4 '登录',未来的到期日期)
- 工作完美。
示例三是我遇到的问题。我期望发生的是 [Authorization]-check 不允许过期会话(access_tokens)通过,而是将用户重定向到 IS4 以根据用户仍然拥有的有效 cookie 自动重新验证(例如四)。
我试图解决的问题:
- 延长 IdentityAccessToken 生命周期:不解决问题,而只是将问题移至新的 expire_date。
- 在我们现有的 IS4 实现上使用 IdentityModel 客户端“Web5”示例,它显示了相同的行为。
--
应用程序的要求是具有较短的 access_token 生命周期,以允许根据后端更改的声明/角色快速更新用户的权限和访问权限,同时允许“持久”登录以减少用户必须花费的时间填写他们的帐户详细信息。
完全有可能不是技术问题,而是我的思维过程或对这些事情的理解是错误的。如果是这样,请告诉我流程应该是什么,最好是一个工作示例。
--
客户端中的 IdentityModel 配置如下:
uwp - UWP App 中的 IdentityModel.OidcClient 从 3.1.2 迁移到 4.0
我最近将 IdentityModel.OidcClient 的 nuget 包从版本 3.1.2 更新到了 4.0。现在,由于缺少属性,我在现有实现中遇到错误,并且不知道如何从 XXX 迁移到 4.0。
在 nuget 的新 v4 中,无法识别OidcClientOptions
诸如Flow
、ResponseMode
、AuthorizeResponseMode
、的某些属性。AuthenticationFlow
非常感谢任何有关迁移到 v4 的帮助。
asp.net-core - Asp.Net Core API OpenId-Connect 身份验证与 JWT 令牌使用 IdentityModel
我有一个 ASP.NET Core API 作为 Angular SPA 前端的后端。我使用Cognito作为身份提供者,并希望使用它创建一个 OpenId-Connect 身份验证authorization code flow
,这意味着所有秘密凭据都将存储在后端。
授权流程应该是这样的(标准 OpenID Connect 流程):
- FE 应用程序调用
/authorize
端点并被重定向到Cognito
托管 UI。 - 输入凭证后,FE 会收到一个授权码。
- FE 使用授权码调用 BE。
- BE 调用
/token
端点并接收accessToken
和refreshToken
。 - BE 返回
accessToken
FE 并设置refreshToken
为httpOnly
cookie(这个不确定,我可能会存储在 Redis 缓存中)。
然后,每个请求都会添加 FEBearer AccessToken
进行身份验证。当AccessToken
接近到期时,它将使用refreshToken
.
我正在试验这个例子,但这里的应用程序使用 Asp.Net Core cookie 进行身份验证并忽略accessToken
了refreshToken
. 即使在accessToken
过期后我也通过了身份验证。此外,没有太多关于 ASP.NET cookie 如何工作的文档。
因此,现在我正在考虑使用自定义 BE 端点并使用IdentityModel 辅助方法,但不确定处理这样的身份验证是否是一种好习惯。
/Login
- 得到AccessToken
和RefreshToken
/Refresh
-AccessToken
使用更新RefreshToken
。accessToken
临近到期时,FE 会手动调用。
那么,是否有一种“推荐”的方式来很好地处理这种情况而IdentityModel
无需编写自定义实现?
此外,据我所知,存储refreshToken
在httpOnly
cookie 中是很常见的,该 cookie 将添加到发送到 BE 的每个请求中,但是accessToken
当我已经refreshToken
添加每个请求时,我看不出有什么意义。
refreshToken
出于性能和安全原因,存储在 BE 中不是更好吗?
身份验证是每个应用程序的一部分,所以我相信也应该有一些内置的框架功能authorization code flow
。
uwp - 从 IdentityServer 注销不会关闭 webview 弹出窗口
我已使用IdentityModel.OidcClient
UWP 应用并连接到 Azure AD。登录 webview 打开并自动关闭,但注销弹出窗口不会自动关闭。
我的实现是基于这个。当注销发生时,最后的函数调用会在此处进行,但直到手动关闭弹出窗口,执行才会在此AuthenticateAsync
函数调用中挂起。
certificate - 如果不检查证书的有效性,证书在过期日期后是否有效?
我从第 3 方获得了一个应用程序,该应用程序在身份验证过程中使用了证书。我想知道如果源代码以下列方式使用它,证书在过期日期后是否仍然有效:
据我了解,没有验证检查,所以在证书过期后这应该仍然有效,不是吗?
同样,根据我的理解,也没有验证检查,所以在证书过期后这应该仍然有效,不是吗?
此外,web.configs 始终包含 certificateValidationMode="None" 条目。
我已经将整个系统安装在具有本地 IIS 的独立机器上,以便将机器的日期设置为过期日期之后的日期。该应用程序仍然可以正常工作。
是否可以安全地假设证书过期后这仍然有效,或者我没有考虑到可能导致 IIS 服务器拒绝它并导致应用程序停止工作的任何事情?
在此先感谢,迈克尔