自动刷新令牌并添加新的用户安全组 Azure AD

2023-12-19

我有一个简单的 ASP.Net Web-APP,使用 Azure AD 和角色/声明身份验证/授权。基本上,应用程序会检查用户的 IsinRole(),然后根据返回的内容,他可以访问网络应用程序的区域。我们在 Azure AD 中使用安全组。这里的场景是用户属于 Group1,登录网络应用程序后他可以访问 Group1 区域,现在后端管理员将用户添加到 Group2,我们想要的是用户无需注销并重新登录门户我们希望他的令牌也包含这个新添加的 Group2。 无论如何,是否可以刷新令牌,以便为该用户令牌添加额外的 group2,而无需他注销并进入应用程序?

有什么办法可以用新信息强制刷新令牌吗?

感谢你的帮助。

谢谢。


刷新令牌以获取新的访问令牌

一种方法可能是使用Refresh Token获得一个新的Access Token如果您在 Web 应用程序中使用授权代码授权等授权。

你可以在这里读更多关于它的内容 -刷新访问令牌 https://learn.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code#refreshing-the-access-tokens

您的应用程序将需要决定何时获取新的访问令牌。因此,当它意识到后端组件/管理员已更新组成员资格时,它就可以执行此操作。

现在,您尚未提及的一个单独主题是用户已登录的 Web 应用程序如何了解此类事件,但诸如 SingalR 通知之类的内容可能会有所帮助。

注意事项:

  • 使用刷新令牌可能有点脆弱,因为它们可能会因应用程序无法控制的原因而被撤销(例如,用户密码更改、过期时间较长以及其他原因)。如果出现此类错误,获取新的授权码将是唯一的选择。

  • 刷新令牌必须安全保存

  • 特别是在以下情况groups声称可能存在超额情况,仅使用访问令牌可能无济于事。


替代方法(而不是像您提到的那样尝试使用新信息强制刷新令牌)

If groups声明就是您所追求的,然后利用Microsoft Graph API获取有关用户所属安全组的信息,而不是仅查看访问令牌。

您的应用程序代码可以随时再次调用 Microsoft Graph API 以获取新的成员资格详细信息,即按照您的示例的组 1 和组 2(当它知道组成员资格已由后端组件/管理员更新时)。 SignalR 或其他一些通知您的应用程序此类更改的方式也与此相关。

相关的 Microsoft Graph API

  • 用户:获取会员组 https://learn.microsoft.com/en-us/graph/api/user-getmembergroups?view=graph-rest-1.0

    POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
    

    这只是一个与我相关的 API,但还有其他类似的 API,例如memberOf https://learn.microsoft.com/en-us/graph/api/user-list-memberof?view=graph-rest-1.0您可以根据您的要求进行选择。

优点

  1. 您可以绕过用户属于多个组的任何超额情况,因此访问令牌不会以任何方式为您提供所需的所有组信息。

  2. 您无需强制用户注销并重新登录即可获取包含新信息的访问令牌。

超额场景详细信息groups访问令牌中的声明

目前您可能已经编辑了应用程序的清单并设置"groupMembershipClaims"财产给"All" or "SecurityGroup"这样访问令牌就得到了groups声明用户所属的所有组 ID

为了确保令牌大小不超过 HTTP 标头大小限制,Azure AD 限制其包含在组声明中的 objectId 数量。如果用户属于的组数超过超额限制(SAML 令牌为 150 个,JWT 令牌为 200 个),则 Azure AD 不会在令牌中发出组声明。相反,它在令牌中包含超额声明,指示应用程序查询图形 API 以检索用户的组成员身份。

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

自动刷新令牌并添加新的用户安全组 Azure AD 的相关文章

随机推荐

  • 以有限优先级启动子进程

    我正在寻找一种如何使用 Python 启动进程的方法subprocess系统优先级较低的模块 我已经发现 解决方案Unix https stackoverflow com questions 2463533 is it possible t
  • Ansible:如何将文件远程复制到远程

    我需要复制文件 etc resolv conf从远程主机并将其复制到多个远程主机上 my hosts Ansible ubuntu1 4 我想从以下位置复制此文件ubuntu1 to ubuntu2 ubuntu3 and ubuntu4我
  • Rails:在请求范围内共享信息

    Rails 中在当前请求范围内共享信息的机制是什么 熟悉 Asp Net 的人会知道 有一个 HttpContext 可用于请求期间调用的所有实体 Rails 中有类似的东西吗 With around filter and Thread c
  • Javascript数组非未定义元素计数

    我创建一个数组let arr new Array 99999 但我没有把它填满arr length这是99999 我怎么知道有多少实际的 非undefined这个数组中有元素吗 有没有比寻找第一个更好的方法undefined 你可以使用Ar
  • Google Calendar API 返回 invalid_grant 和错误请求

    在我的开发环境中 我有一个用户刚刚收到以下范围的 OAuth 令牌 https www googleapis com auth calendar https www googleapis com auth calendar https ww
  • 集成测试私有类和方法

    对于单元测试 您不应该测试私有方法 是的 但是对于集成测试 使用 MSTest 或 NUnit 等单元测试框架 我非常希望针对测试 url 运行内部 API 调用 以确保当前代码当第三方 API 供应商更改其后端时有效 考虑到系统的复杂性
  • 替代 sql server 2008 中的 First_Value()

    我有以下查询 它在 Oracle 和 DB2 中运行良好 但它在 SQL Server 2008 中不起作用 因为 First Value 函数不可用于相同的 2008年有解决办法吗 select NameGuid Name Ancesto
  • 如何选择 select2 JavaScript 多选中的所有选项

    有一天 我试图弄清楚如何选择 select2 v3 5 1 JavaScript 多选控件中的所有项目 我尝试了一些事情 但我很难弄清楚如何去做 我只想选择框中的每个选项 但显然 select2 没有内置选项来为您选择所有项目 对于 sel
  • 使用 MVC 的多表模型?

    我刚刚开始使用 MVC 一旦我设法将想法转向它 这似乎将是一个很好的方法 我遇到的大多数材料似乎在模型 视图和表之间具有 1 1 的关系 即每个模型代表一个表并允许 CRUD 以及更复杂的功能 如果我有一个允许帐户创建和更新的帐户模型怎么办
  • STATHREAD 和主线程

    我不完全理解 STATHREAD 属性的作用http msdn microsoft com en us library system stathreadattribute aspx http msdn microsoft com en us
  • 哪些技术最适合我的应用程序:Struts 与 Hibernate 或 Spring 与 Hibernate

    我有 Struts2 和 Spring 的工作知识 我想开发一个管理多个公司信息的应用程序 我完全不知道什么技术最适合我的应用程序 例如 Struts2 Hibernate MVC 和 Spring 有人可以帮助我选择合适的技术吗 以下是您
  • 空的“期望:”标题有什么意义吗?

    许多图书馆包括Expect 100 continue默认情况下 在所有 HTTP 1 1 POST 和 PUT 请求上 我打算通过在客户端上删除那些请求的 100 Continue 机制来减少感知延迟 对于这些请求 我知道立即发送数据的费用
  • 文件作为 argparse 的命令行参数 - 如果参数无效,则出现错误消息

    我目前正在使用 argparse 如下所示 import argparse from argparse import ArgumentParser parser ArgumentParser description ikjMatrix mu
  • 角度服务单元测试 DoneFn

    我正在关注 Angular 官方文档 我可以看到以下代码 it getObservableValue should return value from observable done DoneFn gt service getObserva
  • Console.ReadKey();和 Switch 语句 - 使用字母

    我正在尝试用 C 编写一个程序 该程序基本上通过使用 Console ReadKey 来根据用户按下的键 例如 X 退出 D 断开等 运行 在 c 中 我遇到的问题是如何在 Switch 语句中使用 ReadKey 信息 有人可以帮忙吗 代
  • Django没有这样的表:删除迁移和数据库后的django_site

    我尝试更改应用程序名称 这不起作用 所以我尝试将其改回来 这也不起作用 我删除了所有迁移和我的 db sqlite 现在每当我尝试makemigrations or migrate我收到此错误 django db utils Operati
  • CMake 生成器表达式未被评估

    由于出现以下警告 CMake Error at test CMakeLists txt 29 get target property The LOCATION property may not be read from target my
  • 使用 grunt-sass 编译 node-sass 时,出现错误“致命错误:“原始”参数必须是函数类型。”

    这是我在 gruntfile 中的 sass 声明 sass dist options implementation node sass style expanded noCache true files dist css jk css s
  • 如何等待 Indy 线程池中的所有线程完成

    我正在使用 Delphi xe 5 作为一个应用程序 该应用程序使用 Indy 来管理我的服务器应用程序 每个客户端连接都有自己的会话 这是完美的 现在我需要在这些会话之一中以异步方式执行多项任务 当所有这些任务完成后 控制权可以返回给调用
  • 自动刷新令牌并添加新的用户安全组 Azure AD

    我有一个简单的 ASP Net Web APP 使用 Azure AD 和角色 声明身份验证 授权 基本上 应用程序会检查用户的 IsinRole 然后根据返回的内容 他可以访问网络应用程序的区域 我们在 Azure AD 中使用安全组 这