OAuth授权流程 - 令牌到期

时间:2016-02-12 01:32:42

标签: oauth-2.0 outlook-restapi outlook-calendar expired-sessions

我正在开发一个使用Outlook Calendar 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错误代码的回复,请丢弃刷新令牌并请求新的授权码。“

那么我怎样才能保证我的应用程序将始终让所有用户都登录?

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

由于

2 个答案:

答案 0 :(得分:2)

数目:

  1. 几分钟。确切的值是实现细节,可以随时更改。您应该尽一切可能在获得代码后立即兑换代码。
  2. 请参阅http://www.cloudidentity.com/blog/2015/03/20/azure-ad-token-lifetime/
  3. 截至今天,生命限制无法改变。我们正在开发能够为您提供更多控制权的功能,但我们暂时没有可以分享的ETA
  4. 保证用户登录的唯一方法是成功兑换刷新令牌,或者通过身份验证流程。缓存凭据的使用仅限于极少数情况,并且可能在即将发布的服务版本中不允许使用。

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

答案 1 :(得分: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"