2

我通过初始登录获得了一个 JWT 令牌,该令牌设置为在 60 分钟内到期。我想更新这个令牌,这样用户就不会被注销。

为此,我正在使用该AcquireTokenAsync60 分钟窗口内的呼叫UserAssertion

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 令牌的上述调用?

任何输入表示赞赏。

4

1 回答 1

1

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

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

可以使用 refresh-token 刷新访问令牌,最长期限为 90 天,从通过提示用户获取访问令牌之日起有 14 天的到期滑动窗口。

查看我们实现此场景的代码示例以获得更多帮助。如果我误解了您的情况,请随时告诉我。

于 2017-07-07T07:55:23.750 回答