Azure 使用AcquireTokenSilentAsync重新验证持久化令牌缓存

Azure 使用AcquireTokenSilentAsync重新验证持久化令牌缓存,azure,authentication,azure-active-directory,owin,adal,Azure,Authentication,Azure Active Directory,Owin,Adal,我有一个场景,其中3种不同类型的客户端(设备类型)预计能够通过Azure AD对我的web应用进行身份验证。但是,只有在第一种类型(来自PC环境的普通浏览器)中,才会要求用户插入Azure AD用户名和密码以登录。我的想法是创建某种流程,第一次只需要使用Azure AD用户名和密码登录即可。用户将使用第一种类型的客户端进行首次登录,但从那时起,该过程也将在没有用户名和密码的情况下工作;相反,用户可以通过用户名+pin甚至智能卡登录来访问系统 经过一些研究,“刷新令牌”一词似乎经常出现。看起来,A

我有一个场景,其中3种不同类型的客户端(设备类型)预计能够通过Azure AD对我的web应用进行身份验证。但是,只有在第一种类型(来自PC环境的普通浏览器)中,才会要求用户插入Azure AD用户名和密码以登录。我的想法是创建某种流程,第一次只需要使用Azure AD用户名和密码登录即可。用户将使用第一种类型的客户端进行首次登录,但从那时起,该过程也将在没有用户名和密码的情况下工作;相反,用户可以通过用户名+pin甚至智能卡登录来访问系统

经过一些研究,“刷新令牌”一词似乎经常出现。看起来,ADAL的最新版本;因此,实际的刷新令牌无法保存在某些数据库中,然后在从类型2或类型3设备登录时使用。然而,同一篇文章还建议,这个刷新令牌现在由缓存中的ADAL自动处理

我还发现了一些通过实体框架在MSSQLSLocalDB数据库中实现持久化ADAL令牌缓存的好方法

基本上,我的想法是:

  • 第一次使用OpenIDConnect执行身份验证 用户名和密码,并将令牌缓存保存在本地数据库中
  • 下次不使用用户名和密码登录时,, 从本地数据库检索持久化令牌缓存并使用
  • AcquireTokenSilentAsync登录,并让ADAL处理刷新 令牌逻辑对我来说,就像在缓存内存场景中一样
  • 现在我不确定我的努力是否至少在正确的轨道上(请引导我:),但我注意到,下面代码段中使用的tenantID、SignedUserID和UserObjectID在第一次成功身份验证时都是可检索的,这促使我至少尝试一下

    Dim clientcred As ClientCredential = New ClientCredential(aadClientId, aadAppKey)
    Dim authenticationContext As AuthenticationContext = New AuthenticationContext(aadInstance & tenantId, New ADALTokenCache(SignedInUserID))
    Dim authenticationResult As AuthenticationResult = Await authenticationContext.AcquireTokenSilentAsync(aadGraphResourceID, clientcred, New UserIdentifier(UserObjectID, UserIdentifierType.UniqueId))
    
    注意:AdaltokeCache是自定义AdaltokeCache类的构造函数,用于在本地数据库中持久化令牌缓存

    因此,我将这3个值保存在我的系统数据库中,然后在智能卡登录时,我通过用户名检索它们,然后使用AcquireTokenSilentAsync,如上所示

    我已经实现了这个解决方案,并且有一些问题-

    1) 似乎从本地数据库检索到了持久化令牌,并且authenticationResult对象确实检索到了正确的值;访问令牌、id令牌和用户信息!但是,这似乎并不能验证我/让我登录。request.IsAuthenticated保持为假,我不知道下一步该怎么做。这个过程是错误的还是我需要做更多的事情

    2) authenticationResult似乎有一个过期日期,该日期始终为原始令牌创建时间后的1小时。在我看来,这似乎是实际的访问令牌过期时间,但在任何ADAL相关对象中都看不到与刷新令牌过期相关的任何内容!所以这是一个相当棘手的情况

    3) ADAL确实说刷新令牌是在缓存中自动处理的。但是是否需要从Azure AD配置端进行配置?我在Azure门户中未发现任何与设置刷新令牌或其过期详细信息相关的内容