使用AcquireTokenAsync和现有JWT令牌更新ADAL令牌

使用AcquireTokenAsync和现有JWT令牌更新ADAL令牌,jwt,azure-active-directory,access-token,adal,refresh-token,Jwt,Azure Active Directory,Access Token,Adal,Refresh Token,我有一个通过初始登录的JWT令牌,它将在60分钟后过期。我想续订此令牌,以便用户不会注销 为此,我使用AcquireTokenAsync调用,并使用UserAssertion60分钟窗口 公共静态异步任务续订令牌(字符串resourceUri) { var authContext=新的AuthenticationContext(授权); var authHeader=HttpContext.Current.Request.Headers[“Authorization”]; var userAcc

我有一个通过初始登录的JWT令牌,它将在60分钟后过期。我想续订此令牌,以便用户不会注销

为此,我使用
AcquireTokenAsync
调用,并使用
UserAssertion
60分钟窗口

公共静态异步任务续订令牌(字符串resourceUri)
{
var authContext=新的AuthenticationContext(授权);
var authHeader=HttpContext.Current.Request.Headers[“Authorization”];
var userAccessToken=authHeader.Substring(authHeader.LastIndexOf(“”)).Trim();
var userAssertion=newuserassertion(userAccessToken);
//继续返回具有相同到期日的相同访问令牌
var authResult=await authContext.AcquireTokenAsync(resourceUri、ClientId、userAssertion);
var userInfo=authResult.userInfo;
var apiAccessToken=authResult.AccessToken;
var expiry=authResult.ExpiresOn.UtcDateTime.ToString(“u”);
}
是否只有在现有JWT令牌过期后才能使用上述调用


任何输入都值得赞赏。

根据您的代码,您似乎希望在web api(服务)端刷新令牌,而在服务端,您不应该续订访问令牌。客户端应用程序应该执行该操作

使用ADAL,您的应用程序将在最终用户第一次登录时获得访问和刷新令牌,然后在访问令牌过期且刷新令牌可用且有效时,您可以使用刷新令牌以静默方式获取新的访问令牌()

可以使用刷新令牌刷新访问令牌,最长时间为90天,从提示用户获取访问令牌的日期起,有14天的到期滑动窗口


查看我们的。如果我误解了您的方案,请随时告诉我。

谢谢-我的方案是,我有一个MVC应用程序托管我的SPA客户端和一个WebAPI来访问资源。我在客户端使用OWIN中间件使用身份验证代码获取访问令牌,但是在返回的
身份验证结果中,没有
刷新令牌
,只有
访问令牌
。因此,我在客户端应用程序中使用这个
access\u令牌
,使用
AcquireTokenAsync
UserAssertion(access\u令牌)
请求一个新令牌。这不对吗?您提到的代码与我的代码类似,但我无法确定到期时刷新令牌的代码在哪里,甚至无法确定刷新令牌本身。@sppc42,在adal v3.x版本中,它不会公开刷新令牌,adal将为您处理此过程,例如检查令牌缓存中的刷新令牌是否可用和有效,通过刷新令牌获取新的访问令牌。有关更多详细信息,请参阅。南宇,我已经看到了那个博客,我所了解的是,现在ADAL中没有
refresh_代币。这就是为什么我上面的代码使用最初收到的
access\u令牌
进行续订,这也是该博客中提到的,也就是说,使用
UserAssertion(access\u令牌)
调用
AcquireTokenAsync
。但是,如果在令牌仍然有效(未过期)时调用,则会从缓存中返回相同的令牌。那么,如果这个
access\u令牌
过期了,那么只有带有这个
access\u令牌
AcquireTokenAsync
会给我一个新的刷新令牌和新的过期日期吗?@sppc42,返回了刷新令牌,但是adal不会向您公开它,adal会自动处理刷新令牌过程。在您的场景中,使用刷新令牌获取新的访问令牌是一种可靠的方法。@请参见您先前关于获取相同访问令牌的评论。ADAL将检查访问令牌过期,如果仍然有效,则从缓存返回该访问令牌。现在,如果它看到它已过期,那么它将使用刷新令牌(Nan Yu提到的是隐藏的)为您获取一个新的访问令牌。第三种情况是,如果刷新令牌也过期,您将收到一个
adalsilentokenacquisitionexception
,指示它不再有效。在这种情况下,您需要悄悄地让用户知道他们需要重新授权并发出新的OWIN质询。