3

我正在开发一个使用 Outlook 日历 REST API 的 Android 应用程序。我正在尝试保持同步并更新多个用户(会议室)的日历。

我的问题是:

1) 初始授权码在多长时间后过期?

2)而不是刷新令牌

访问令牌在60 分钟后过期。如果刷新令牌在 6 小时、14 天或 90 天后过期,我无法获得。

3)后者是可配置的吗?我可以让它不过期吗?

`

更新:(来自https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx

“未提供刷新令牌的生命周期,并且根据策略设置和授权代码授予被 Azure AD 撤销的时间而有所不同。应用程序应该预期并处理新访问令牌请求失败的情况。在这种情况下,它应该返回请求新访问令牌的代码。”

还有:(来自http://blogs.msdn.com/b/exchangedev/archive/2014/03/25/using-oauth2-to-access-calendar-contact-and-mail-api-in-exchange-online -in-office-365.aspx) "刷新令牌没有指定的生命周期。通常,刷新令牌的生命周期相对较长。但是,在某些情况下,刷新令牌会过期、被撤销或缺少所需操作的足够权限。客户端应用程序需要期望和正确处理令牌颁发端点返回的错误。当您收到带有刷新令牌错误的响应时,丢弃当前刷新令牌并请求新的授权码或访问令牌。特别是在授权码授予流程中使用刷新令牌时,如果您收到带有interaction_required 或invalid_grant 错误代码的响应,请丢弃刷新令牌并请求新的授权代码。”

那么如何保证我的应用程序将始终让所有用户登录?

它将在夜间处于飞行模式,并且它也应该从崩溃中自动恢复。我可以在不以编程方式存储凭据的方式对用户进行身份验证的情况下解决问题吗?

谢谢

4

2 回答 2

2

你可以做的是获取refresh_token和access_token。通过 access_token 访问您需要的内容,如果失败,则假定它已过期并使用 refresh_token 更新 access_token。如果用户更改了他们的密码(或者可能有其他情况),那么您从一开始就重新开始用户。

要获得 refresh_token,我认为您需要将 offline_access 添加到您的范围。像这样的东西:

USER_OAUTH2_AUTHORIZE_URL
    + "?client_id=" + config.getClientId()
    + "&redirect_uri=" + getOutlookLoginRedirect(request)
    + "&response_type=code"
    + "&scope=https%3A%2F%2Foutlook.office.com%2Fmail.send%20" +
             "https%3A%2F%2Foutlook.office.com%2Fmail.readwrite%20" + 
             "offline_access%20openid%20email%20profile"
于 2016-04-22T01:16:56.473 回答
2

答案:

  1. 一会儿。确切的值是一个实现细节,可以随时更改。您应该尽一切可能在获得代码后立即兑换代码。
  2. 请参阅http://www.cloudidentity.com/blog/2015/03/20/azure-ad-token-lifetime/
  3. 从今天起,寿命限制不能改变。我们正在开发可授予您更多控制权的功能,但目前我们没有 ETA 可分享

保证用户登录的唯一方法是成功兑换刷新令牌,或通过身份验证流程。缓存凭证的使用仅限于极少数情况,并且在即将推出的服务版本中可能会被禁止。

如果刷新令牌过期,您应该计划执行交互式身份验证。请注意,刷新令牌也可能因同意撤销而失效,这将在所有情况下强制交互。

于 2016-02-13T01:05:02.513 回答