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

时间:2018-06-11 09:48:04

标签: c# authentication token azure-active-directory invalidation

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

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

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

以下是我实施的身份验证流程:

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

    上面步骤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进一步联系。

1 个答案:

答案 0 :(得分:0)

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"

参考:Configurable token lifetimes in Azure Active Directory