当前位置: 首页 > 知识库问答 >
问题:

将应用程序与Azure Active Directory集成:重新验证Id_token以检查用户是否已注销

孙志
2023-03-14

目前,我正在使用微软的这个库将我的应用程序与Azure AD集成:

https://github.com/AzureAD/azure-activedirectory-library-for-js

我的应用程序有自己的用户身份验证。应用程序仅存储用户名,并使用它来映射来自 Azure AD 的用户名。我使用 OAuth 隐式授权和id_token来登录用户。

这是我正在实现的身份验证流程:

  1. 用户单击“登录”
  2. 应用程序将用户重定向到microsoft登录页面
  3. 用户输入用户名/密码
  4. Microsoft登录页面将用户重定向到我的应用程序中的azure登录处理页面
  5. 应用程序的后端代码使用C#验证收到的令牌,以确保它来自Azure AD,代码示例来自:https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation.
  6. 如果令牌有效,则检查系统中是否存在来自令牌的用户名
  7. 如果是,则使用从应用程序的OWIN上下文生成的令牌对用户进行身份验证

问题:

上面第5步中的库只能验证令牌是否有效,包括Azure租户、客户端ID及其过期时间。它不需要网络访问权限。

这意味着即使用户已经使用microsoft注销url注销:https://login.microsoftonline.com/tenant-id/oauth2/logout?post_logout_redirect_uri=uri,来自azure的id_token仍然有效。

我的问题是:

是否有任何方法来检查用户是否在Azure AD中注销,然后使id_token无效,并要求用户重新登录?

更新:

我之所以使用id_token,是因为我只需要用户在 Azure AD 上拥有有效的帐户,并且不需要与 Azure AD 进行任何进一步的联系。

共有1个答案

冷越泽
2023-03-14

ID令牌在到期前被视为有效。通常,web应用程序将用户在应用程序中的会话生存期与为用户颁发的ID令牌的生存期相匹配。您可以调整ID令牌的生存期,以控制web应用程序使应用程序会话过期的频率,以及它要求用户使用Azure AD重新验证的频率(无提示或交互)。

Access Token Lifetime策略控制此资源的访问和ID令牌的有效期。减少Access Token Lifetime属性可以降低访问令牌或ID令牌被恶意行为者长时间使用的风险。(这些令牌不能被撤销。)权衡是性能受到不利影响,因为令牌必须更频繁地更换。

要创建策略,请运行以下命令:

PowerShell

New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"02:00:00","MaxAgeSessionSingleFactor":"02:00:00"}}') -DisplayName "WebPolicyScenario" -IsOrganizationDefault $false -Type "TokenLifetimePolicy"

参考:Azure Active Directory中可配置的令牌生存期

 类似资料:
  • 问题内容: 我需要检查我的应用程序是否在更新时启动,因为我需要创建一个仅在首次安装该应用程序时才出现的视图,以便在更新后再次出现。 问题答案: 您可以将值(例如,当前应用程序版本号)保存到其中,并在每次用户启动应用程序时对其进行检查。 在迅速-2版本看起来是这样的: 在迅速-3版本看起来是这样的:

  • 问题内容: 我想使用jQuery.validate验证数据库中是否存在用户名,所以这是我到目前为止的内容: jQuery的: check-username.php: 此代码始终显示一个错误,即使没有使用用户名也是如此。 我正在使用jQuery Mobile 1.9.1 提前致谢。 问题答案: 通过更改我使用的PHP技术,我设法使它起作用,这是我的PHP: 谢谢大家在这里的帮助:)

  • 我需要一个PDO函数,如果用户course_id已经存在,它将返回false。 这是我的学生表列 标准标识 A这是我的课程表 课程编号 我还有报名表 id 我需要验证用户是否已经使用PHP PDO函数学习了一门课程,以及学习了特定课程的学生人数。

  • 我正在创建一个测验算法,用于登录系统。对于注册过程,用户名和密码存储在一个文本文件中,并被读取以查看它们是否已经存在。如果是这种情况,则会告诉用户用户名或密码已经存在,并重复此操作,直到输入不存在的内容。发生这种情况时,将追加文本文件以添加用户名。然而,出于某种原因,程序不会检查用户的尝试是否已经存在于文本文件中,而只是将其添加到文本文件中,即使它已经存在。 登录过程是检查变量和文本文件中的字符串

  • 我第一次尝试Drools/Guvnor,我们计划在Guvnor中进行规则创作,编译、构建并将包下载到“规则包目录”。 现在我遇到的问题是,将Drools与我们的Java应用程序集成的最佳方式是什么?选项1)构建知识代理并开始将事实插入内存以在我们的应用程序中进行规则评估。在这种情况下,Drools引擎使用与应用程序JVM相同的JVM。选项2)拥有一个构建知识代理的Drools Server,应用程

  • 我们正在开发一个应用程序,将使用CPLEX解决一个工业问题。开发了一个数学模型(文件)。我们希望直接使用该模型,而不是使用CPLEX Java API重新转录。 在我们的架构中,我们有一个专门用于检索业务数据和创建合适的文件的应用程序。原始模型和这些数据文件应发送到安装在单独机器上的CPLEX实例。 问题是允许加载和运行文件的OPLJavaAPI不提供任何API来使用远程CPLEX实例。另一方面,