我正在开发一个使用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错误代码的回复,请丢弃刷新令牌并请求新的授权码。“
那么我怎样才能保证我的应用程序将始终让所有用户都登录?
它将在夜间处于飞行模式,并且它也应该自动从崩溃中恢复。 我可以在不以编程方式存储凭证的用户身份验证的情况下解决吗?
由于
答案 0 :(得分:2)
数目:
保证用户登录的唯一方法是成功兑换刷新令牌,或者通过身份验证流程。缓存凭据的使用仅限于极少数情况,并且可能在即将发布的服务版本中不允许使用。
如果刷新令牌过期,您应该计划执行交互式身份验证。请注意,刷新令牌也可能因同意撤销而失效,这将在所有情况下都要求交互性。
答案 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"