如何重新使用访问令牌以用于将来的请求以及如何刷新访问令牌Android Outlook API

时间:2016-10-07 13:33:00

标签: android outlook outlook-restapi

在示例中,OutlookQuickStart for Android在登录()后的第一个请求中正常工作。
现在我想继续将我的应用程序连接到该用户并继续检查新电子邮件。
我该怎么办?重新使用访问令牌并构建检查新电子邮件的请求?
我是否必须保存访问令牌,刷新令牌?
如果Android中的令牌过期,我如何刷新令牌。

1 个答案:

答案 0 :(得分:0)

根据https://github.com/AzureAD/azure-activedirectory-library-for-android的auth库文档,库会为您缓存令牌和刷新令牌。因此,每次需要时,只需使用acquireTokenSilentSync即可获取令牌。如果当前令牌仍然有效,该函数将从缓存中返回当前令牌,如果它已过期,则会刷新它。

更新:我仔细研究了您正在使用的示例以及它使用的Outlook SDK。这里的关键是DependencyResolver对象。您将该对象传递给OutlookClient构造函数。然后,只要您使用OutlookClient进行API调用,它就会调用您在创建getCredentials时提供的DependencyResolver覆盖。

因此,当样本代表时,您应该可以通过OutlookClient进行多次调用,而无需进行任何更改。但是,一小时后,当访问令牌过期时,调用将开始失败。解决此问题的方法是将getCredentials覆盖更改为始终调用acquireTokenSilentSync。类似的东西:

@Override
public Credentials getCredentials() {
    logger.debug("getCredentials in resolver called");

    AuthenticationResult result = mAuthContext.acquireTokenSilentSync(
        scopes, 
        getResources().getString(R.string.AADClientId), 
        UserIdentifier.getAnyUser());

    logger.debug("AcquireTokenSilentSync SUCCESS");
    logger.debug("Token expires: ", result.getExpiresOn());
    logger.debug("Token: ", result.getAccessToken());
    return new OAuthCredentials(result.getAccessToken());
}
  

警告:由于在我的开发机器上运行Android模拟器时出现问题,我无法运行此代码进行验证:(。