将应用程序与 Azure Active Directory 集成:重新验证 Id_token 以检查用户是否已注销
Integrating applications with Azure Active Directory: revalidate Id_token to check if user already logged out
目前,我正在使用 Microsoft 的这个库将我的应用程序与 Azure AD 集成:
https://github.com/AzureAD/azure-activedirectory-library-for-js
我的应用程序有自己的用户身份验证。该应用程序仅存储用户名,并使用它与 Azure AD 中的用户名进行映射。我使用 OAuth 隐式授权和 id_token 来登录用户。
这是我正在实施的身份验证流程:
- 用户点击登录。
- 应用将用户重定向到 Microsoft 登录页面。
- 用户输入他们的 username/password.
- Microsoft 登录页面将用户重定向到我的应用程序中的 azure 登录处理页面。
- 应用程序的后端代码使用 C# 验证收到的令牌以确保它来自 Azure AD,代码示例来自:https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation.
- 如果token有效,则检查系统中是否存在token中的用户名
- 如果是,则使用从我的应用程序的 OWIN 上下文生成的令牌对用户进行身份验证。
问题:
上面第 5 步的库只能验证令牌是否对 Azure 租户、客户端 ID 及其过期时间有效。它不需要网络访问权限。
这意味着即使用户已经使用 microsoft logout 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 进行任何进一步联系。
ID 令牌在到期前都被视为有效。通常,Web 应用程序会将用户在应用程序中的会话生命周期与为用户颁发的 ID 令牌的生命周期相匹配。您可以调整 ID 令牌的生命周期,以控制 Web 应用程序使应用程序会话过期的频率,以及它要求用户使用 Azure AD 重新进行身份验证的频率(静默或交互式)。
访问令牌生命周期策略控制此资源的访问令牌和 ID 令牌被视为有效的时间。缩短访问令牌生命周期 属性 可降低恶意行为者长时间使用访问令牌或 ID 令牌的风险。 (这些令牌不能被撤销。)权衡是性能受到不利影响,因为必须更频繁地更换令牌。
要创建策略,运行此命令:
PowerShell
New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"02:00:00","MaxAgeSessionSingleFactor":"02:00:00"}}') -DisplayName "WebPolicyScenario" -IsOrganizationDefault $false -Type "TokenLifetimePolicy"
目前,我正在使用 Microsoft 的这个库将我的应用程序与 Azure AD 集成:
https://github.com/AzureAD/azure-activedirectory-library-for-js
我的应用程序有自己的用户身份验证。该应用程序仅存储用户名,并使用它与 Azure AD 中的用户名进行映射。我使用 OAuth 隐式授权和 id_token 来登录用户。
这是我正在实施的身份验证流程:
- 用户点击登录。
- 应用将用户重定向到 Microsoft 登录页面。
- 用户输入他们的 username/password.
- Microsoft 登录页面将用户重定向到我的应用程序中的 azure 登录处理页面。
- 应用程序的后端代码使用 C# 验证收到的令牌以确保它来自 Azure AD,代码示例来自:https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation.
- 如果token有效,则检查系统中是否存在token中的用户名
- 如果是,则使用从我的应用程序的 OWIN 上下文生成的令牌对用户进行身份验证。
问题:
上面第 5 步的库只能验证令牌是否对 Azure 租户、客户端 ID 及其过期时间有效。它不需要网络访问权限。
这意味着即使用户已经使用 microsoft logout 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 进行任何进一步联系。
ID 令牌在到期前都被视为有效。通常,Web 应用程序会将用户在应用程序中的会话生命周期与为用户颁发的 ID 令牌的生命周期相匹配。您可以调整 ID 令牌的生命周期,以控制 Web 应用程序使应用程序会话过期的频率,以及它要求用户使用 Azure AD 重新进行身份验证的频率(静默或交互式)。
访问令牌生命周期策略控制此资源的访问令牌和 ID 令牌被视为有效的时间。缩短访问令牌生命周期 属性 可降低恶意行为者长时间使用访问令牌或 ID 令牌的风险。 (这些令牌不能被撤销。)权衡是性能受到不利影响,因为必须更频繁地更换令牌。
要创建策略,运行此命令:
PowerShell
New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"02:00:00","MaxAgeSessionSingleFactor":"02:00:00"}}') -DisplayName "WebPolicyScenario" -IsOrganizationDefault $false -Type "TokenLifetimePolicy"