具有 Identity Server4 并发登录的隐式授予 SPA

2024-04-04

如何使用授权类型限制特定 SPA 客户端中每个客户端应用程序的 x 登录次数 - 隐式

这超出了身份服务器的范围 https://github.com/IdentityServer/IdentityServer4/issues/736

尝试过的解决方案 -

  1. 访问令牌保留到数据库,但是这种方法客户端不断更新访问令牌而无需编写代码,因为客户端浏览器请求带有有效令牌,尽管其已过期,静默身份验证正在通过发出新的引用令牌来更新令牌(这可以见表 persistGrants token_type 'reference_token')

  2. Cookie 事件 - 在 validateAsync 上 - 虽然这仅适用于服务器 Web,但运气不太好,我们不能将此逻辑放在 SPA 客户端的 oidc 库上。

  3. 通过重写 SignInAsync 自定义 SignInManager - 但在调试模式下执行未达到此点,因为 IDM 不断识别用户具有有效令牌(尽管已过期)并不断重新颁发令牌(请注意,此处没有刷新令牌可供管理)通过存储和修改来实现!!!)

即使访问令牌已过期,IDM 如何在不带用户登录屏幕的情况下重新颁发令牌的任何线索??(静默身份验证 https://auth0.com/docs/api-auth/tutorials/silent-authentication. ??


实施配置文件服务覆盖activesync

  public override async Task IsActiveAsync(IsActiveContext context)
    {
        var sub = context.Subject.GetSubjectId();
        var user = await userManager.FindByIdAsync(sub);

        //Check existing sessions
        if (context.Caller.Equals("AccessTokenValidation", StringComparison.OrdinalIgnoreCase))
        {
            if (user != null)
                context.IsActive = !appuser.VerifyRenewToken(sub, context.Client.ClientId);
            else
                context.IsActive = false;
        }
        else
            context.IsActive = user != null;
    }

startup

services.AddTransient<IProfileService, ProfileService>();

将身份服务器服务添加到配置服务下的集合中时

 .AddProfileService<ProfileService>();

Update

Session.Abandon(); //is only in aspnet prior versions not in core
Session.Clear();//clears the session doesn't mean that session expired this should be controlled by addSession life time when including service.

我碰巧找到了一种更好的方法,即使用 aspnetuser securitystamp,每次用户登录时都会更新安全标记,以便任何先前的活动会话/cookie 都将失效。

_userManager.UpdateSecurityStampAsync(_userManager.FindByEmailAsync(model.Email).Result).Result

更新(最终):

登录时:-

var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberLogin, false);
                if (result.Succeeded)
                {
            //Update security stamp to invalidate existing sessions           
                    var user = _userManager.FindByEmailAsync(model.Email).Result;
                    var test= _userManager.UpdateSecurityStampAsync(user).Result;
                    //Refresh the cookie to update securitystamp on authenticationmanager responsegrant to the current request
                    await _signInManager.RefreshSignInAsync(user);
          }

配置文件服务实施:-

public class ProfileService : ProfileService<ApplicationUser>

{
public override async Task IsActiveAsync(IsActiveContext context)
        {
            if (context == null) throw new ArgumentNullException(nameof(context));
            if (context.Subject == null) throw new ArgumentNullException(nameof(context.Subject));

            context.IsActive = false;

            var subject = context.Subject;
            var user = await userManager.FindByIdAsync(context.Subject.GetSubjectId());

            if (user != null)
            {
                var security_stamp_changed = false;

                if (userManager.SupportsUserSecurityStamp)
                {
                    var security_stamp = (
                        from claim in subject.Claims
                        where claim.Type =="AspNet.Identity.SecurityStamp"
                        select claim.Value
                        ).SingleOrDefault();

                    if (security_stamp != null)
                    {
                        var latest_security_stamp = await userManager.GetSecurityStampAsync(user);
                        security_stamp_changed = security_stamp != latest_security_stamp;
                    }
                }

                context.IsActive =
                    !security_stamp_changed &&
                    !await userManager.IsLockedOutAsync(user);
            }
        }
    }   

*

挂钩服务集合:-

*

services.AddIdentityServer()
    .AddAspNetIdentity<ApplicationUser>()                
         .AddProfileService<ProfileService>();

即每次登录时,用户的安全标记都会更新并推送到 cookie,当令牌过期时,授权端点将验证安全更改,如果有任何更改,则重定向用户登录。这样我们就可以确保只有一个活动会话

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有 Identity Server4 并发登录的隐式授予 SPA 的相关文章

  • 如何允许应用程序声明“https”方案 URI? (即如何从 https URL 打开桌面应用程序?)

    目前我正在尝试为 OAuth 2 0 授权流程创建一个客户端 实际上是一个本机应用程序 并且在规范中就在这儿 https www rfc editor org rfc rfc8252 section 7 2据说有 3 种方法来处理重定向 U
  • 是否可以使用相同的客户端凭据拥有多个有效的访问令牌?

    我有一个使用 OAuth2 身份验证的 API 设置 客户已使用 WSO2 订阅了我的 API 我们不使用刷新令牌 所有访问令牌将在 1 小时后过期 如果我的客户端使用相同的客户端凭据请求 2 个访问令牌 会发生什么情况 第一个令牌会被撤销
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • Windows 身份验证失败并显示“401 Unauthorized”

    我有一个 MVC 客户端访问受 IDS4 保护的 Web API 它们都在我的本地计算机上运行并由 IIS 托管 使用本地身份进行身份验证时 该应用程序运行良好 但是 当我尝试使用 Windows 身份验证时 开发工具不断收到 401 Un
  • OAuth2:查询字符串与片段

    刚刚注意到 在 OAuth2 中 当请求的授权类型为 code 时 回调将其包含在查询字符串参数中 在 之后 但是 当授权是 令牌 时 它会作为片段传递 在 之后 这看起来是规范的一部分 https datatracker ietf org
  • SQL Server Express 到 .mdf 文件的连接

    两部分问题 我使用 VS 2015 Update 3 创建了一个 ASP NET MVC 5 应用程序 我在本地计算机上完成了该项目 突然 我无法再通过 SQL Server 对象资源管理器连接到 mdf数据库文件并出现以下错误 无法打开数
  • 使用 login.microsoft.com 的 OAuth 返回不一致的令牌

    我在用着office js helpers认证库 https github com OfficeDev office js helpers authentication 使用Microsft Azure AD 2 0 Converged a
  • 如何避免在此控制器方法中两次获取用户?

    我下面有一个获取当前用户的方法 但它获取了用户两次 这似乎有点多余 所以我想看看是否有一种方法可以将其减少到一次 第一个 User 获取来自 FindByEmailFromClaimsPrinciple 然后第二个来自 dbContext
  • 返回无效或过期令牌的错误

    我正在尝试使用 Owin 实施 OAuth 承载身份验证 当传递无效或过期的令牌时 默认实现是将其记录为警告并且只是不设置身份 然而 在这种情况下 我想拒绝整个请求并出现错误 但我该怎么做呢 深入研究代码后我发现OAuthBearerAut
  • ASP.NET Identity 2.0解密Owin cookie

    我正在应用多租户的服务器端应用程序中工作 在这个服务器端我有一个后台 ASP NET MVC 和后端 WCF 我想解密身份 cookie 以便我可以检查它是否有效并使用它在 WCF 服务中进行身份验证 更具体地说 我真的想知道 ASP NE
  • Spotify PKCE code_verifier 不正确

    我很高兴听到我现在可以通过 PKCE 使用 Spotify Web API 而无需使用后端应用程序 不幸的是 我似乎有某种误解并且无法让它发挥作用 一路上我可能犯了一些小错误 但我做了一次却无济于事 我把石板擦干净并再次尝试 但仍然没有运气
  • 如何获取 Google Vertex AI 服务的授权令牌?

    我正在尝试通过 REST 调用 Google 的 Vertex AI API 如下所示 https us central1 aiplatform googleapis com v1 projects 我无法弄清楚从哪里获取 访问令牌 X P
  • Sage One API - unsupported_grant_type

    我正在尝试通过以下方式获取 Sage One API 的访问令牌docs https developers sageone com docs en v1 authentication request access token using G
  • 身份服务器刷新令牌资源所有者密码凭证流程

    我正在使用 IdentityServer 来控制对 API 的访问 我有一个单独的身份验证 API 它发出令牌并验证访问请求以确保 API 的安全 我让用户能够通过安全的 Web 应用程序生成访问令牌 我正在使用资源所有者密码凭证流程 有没
  • Facebook MVC 5 ASP.NET 身份 - 某些用户的电子邮件为空

    这是我一个月来试图解决的问题 尝试了任何可能的文章 代码 在ExternalLoginCallback操作中 AuthenticationManager GetExternalLoginInfoAsync 返回一个有效的对象 包含所有提供者
  • UseOpenIdConnectAuthentication - 无法取消对消息的保护。状态错误消息

    我正在尝试将 Google 和 Azure Active Directory 权限添加为我的应用程序中的 OpenIdConnect 选项 如果我单独添加它们 它就可以正常工作 但如果我将它们都添加 我会收到以下错误消息 无法取消对消息的保
  • PKCE 增强授权代码流中保护 code_verifier 的最佳实践

    由于 PKCE 现在是推荐的隐式流程授权方法 因此我正在寻找处理代码验证器的最佳实践以及如何完成此操作的建议 在高层 PKCE 授权流程中包括 产生code verifier在客户端 产生code challenge来自 1 hit aut
  • GeneratePasswordResetTokenAsync 和GenerateUserTokenAsync 的默认TokenLifespan 是多少

    我到处都找过 但似乎无法确定每个选项的默认值是什么 我还需要知道是否有办法为每个设置不同的寿命 谢谢 对于任何令牌来说 默认值显然都是 24 小时 您可以将其设置为不同的值 但相同的值将同等地应用于所有令牌 GenerateEmailCon
  • IdentityServer:API 资源和范围

    我的理解是 一个Client允许访问 ome 或更多ApiScope and an ApiScop与许多有联系ApiResources其名称成为观众主张的价值观 IE 1 个客户端 gt 许多 API 范围 和 1 API 范围 gt 许多

随机推荐

  • 类只有静态字段和方法是不好的做法吗?

    我有一堂课 其中包括only静态成员变量和静态方法 本质上 它充当通用实用程序类 类只包含静态成员变量和静态方法是不好的做法吗 不 我一点也不这么认为 拥有一个充满实例方法的类是更糟糕的做法 而这些实例方法实际上并不依赖于特定实例 使它们静
  • int b=0,a=1;b=++a+++a; b 的值是多少?它的计算方法是什么? [复制]

    这个问题在这里已经有答案了 int main int b 0 a 1 initialize a and b b a a calculate assign the value of b print f d b return 0 b 的值是多少
  • CMake不知道Qt4 qmake在哪里

    我正在使用 Debian 操作系统 我试图指出 cmake 我的 Qt4 在哪里 我尝试构建 qjson 库及其 CMakeLists txt http pastebin com fKNp0Qgy http pastebin com fKN
  • 如何使用 os.listdir 仅选择一种文件类型?

    连接同一图像的 10 个条带后 我想将它们转换为反射率 然后将它们除以 10 000 尽管如此 我的文件夹中有两种类型的文件 但我只想将代码应用于 my img 文件而不是 hdr 您知道我如何使用 os listdir 进行此选择吗 我的
  • Jenkins 多配置项目处理并发设备使用

    Case 我有一个詹金斯奴隶女巫在移动设备 android ios 上运行葫芦测试 为了区分测试在哪些机器 iOS 的 mac 或 Android 的 Linux 上运行 我还使用Throttle 并发构建插件 通过这种方式 我可以区分设备
  • Spring Boot + Spring Security + CORS 中没有“Access-Control-Allow-Origin”

    我正在尝试使用 Spring security 进行 CORS 这是我的 WebSecurityConfigurerAdapter Configuration public class SecurityConfig extends WebS
  • 仅允许从触发器内插入

    我是 SQL 编程新手 我在网上找不到这个问题的答案 我正在使用 pl pgsql 希望获得以下结果 我有一个具有某些属性的表 A 我应该随时更新此表 因此 每当进行可能影响 A 值的更改 在与 A 相关的其他表 B 或 C 中 时 都会触
  • 如何删除启动画面之前出现的白屏?

    打开 java 文件时 我首先看到空白屏幕 然后出现闪屏布局 我有java文件 new Handler postDelayed new Runnable Override public void run Task finish ARG SP
  • 与 HibernateTemplate 和 SessionFactory 的单个数据库连接

    在java方面 一切工作正常 但是当我查看V SESSION特殊的oracle表 以及记录任何登录或注销操作的日志表时 这是一场灾难 每个查询都会执行登录 注销操作 所以这是我的问题 有没有办法配置 Spring 与数据库有一个唯一的连接
  • 从 .vbs 文件调用 VBA 宏会引发 800A03EC 错误

    我正在尝试通过 VBS 文件 文件名 Check final vbs 运行 VBA 宏 这是代码 Option Explicit run macro Sub run macro Dim xl1 Dim sCurPath Dim xlBook
  • 空响应返回 204

    当我执行 GET 请求但没有找到任何数据时 我的控制器返回 204 Route user v1 controller public class UserLoginController Controller HttpGet public as
  • 使用 Moq 模拟存储库

    为了模拟存储库 我使用下面的代码 我不明白为什么变量empl总是null 你知道我错过了什么吗 Thanks TestMethod public void Test var employee new Employee EmployeeID
  • Plotly.express choropleth 仅显示一种颜色

    我正在尝试使用创建一个 choroplethplotly express 该图能够加载 但它只显示一种颜色 我可以将鼠标悬停在每个功能上 它会显示相关信息 但不以可变颜色显示 这意味着它正在读取 geojson 但无法正确显示 u geds
  • 情节子图与规格问题,值错误

    我正在尝试使用辅助 y 轴和绘图子图绘制 3 个子图 但无论我如何尝试 仍然会遇到此类错误 值错误 make subplots 的 specs 参数必须是维度为 3 x 1 的字典的 2D 列表 收到类型 的值 secondary y Tr
  • 捆绑 JavaScript 课程 Uncaught SyntaxError: Unexpected token <

    使用mvc4课程的bundle功能 未捕获的语法错误 意外的标记 加载时 和debug true 一切都像例外一样工作 我该如何解决该错误 或 者我可以禁用脚本的捆绑功能吗 Solved 重命名了捆绑包名称 使其与任何目录都不匹配 在回答导
  • unlink 和 rm 在 unix 上的区别

    这两个命令之间真正的区别是什么 为什么删除文件的系统调用叫unlink代替delete 你需要了解一些关于原始 Unix 文件系统的知识才能理解这个非常重要的问题 与同时代的其他操作系统 60 年代末 70 年代初 不同 Unix 没有将文
  • 为什么我的网络浏览器版本的 java 与命令行版本不同

    the Safari browser says I am running 7 But the command line says I am running 6 prg ceylon dist samples helloworld java
  • Angular 方式将表单数据提交到 iframe

    我有像下面这样的html
  • 定时器在待机模式下会发生什么情况? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 具有 Identity Server4 并发登录的隐式授予 SPA

    如何使用授权类型限制特定 SPA 客户端中每个客户端应用程序的 x 登录次数 隐式 这超出了身份服务器的范围 https github com IdentityServer IdentityServer4 issues 736 尝试过的解决