ADAL使用AcquireTokenAsync和现有JWT令牌续订令牌

时间:2017-07-06 13:39:27

标签: jwt azure-active-directory access-token adal refresh-token

我通过初始登录获得了一个JWT令牌,该令牌设置为在60分钟后过期。我想更新此令牌,以便用户不会注销。

为此,我使用AcquireTokenAsync

使用UserAssertion调用60分钟的窗口
public static async Task RenewToken(string resourceUri)
{
    var authContext = new AuthenticationContext(Authority);
    var authHeader = HttpContext.Current.Request.Headers["Authorization"];
    var userAccessToken = authHeader.Substring(authHeader.LastIndexOf(' ')).Trim();
    var userAssertion = new  UserAssertion(userAccessToken);

    // keeps returning the same access token with same expiry
    var authResult = await authContext.AcquireTokenAsync(resourceUri, ClientId, userAssertion);

    var userInfo = authResult.UserInfo;
    var apiAccessToken = authResult.AccessToken;
    var expiry = authResult.ExpiresOn.UtcDateTime.ToString("u");
}

只有在令牌过期后才能使用现有JWT令牌的上述调用吗?

赞赏任何投入。

1 个答案:

答案 0 :(得分:1)

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

使用ADAL,您的应用将在最终用户首次登录时获得访问和刷新令牌,然后您可以使用刷新令牌以在访问令牌过期时静默获取新访问令牌(AcquireTokenSilentAsync)刷新令牌可用&有效。

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

结帐我们的code sample implementing this scenario for more help。如果我误解了你的情况,请随时告诉我。