Azure 使用AcquireTokenSilentAsync重新验证持久化令牌缓存
我有一个场景,其中3种不同类型的客户端(设备类型)预计能够通过Azure AD对我的web应用进行身份验证。但是,只有在第一种类型(来自PC环境的普通浏览器)中,才会要求用户插入Azure AD用户名和密码以登录。我的想法是创建某种流程,第一次只需要使用Azure AD用户名和密码登录即可。用户将使用第一种类型的客户端进行首次登录,但从那时起,该过程也将在没有用户名和密码的情况下工作;相反,用户可以通过用户名+pin甚至智能卡登录来访问系统 经过一些研究,“刷新令牌”一词似乎经常出现。看起来,ADAL的最新版本;因此,实际的刷新令牌无法保存在某些数据库中,然后在从类型2或类型3设备登录时使用。然而,同一篇文章还建议,这个刷新令牌现在由缓存中的ADAL自动处理 我还发现了一些通过实体框架在MSSQLSLocalDB数据库中实现持久化ADAL令牌缓存的好方法 基本上,我的想法是: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
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门户中未发现任何与设置刷新令牌或其过期详细信息相关的内容