Azure Active Directory - OAuth 身份验证与授权代码授予流和移动

Azure Active Directory - OAuth Authentication with Authorization Code Grant Flow and mobile

我有一个 Web API,它使用 Azure AD OAuth 进行身份验证,由移动客户端(android、iOS)使用,并且有一个功能要求要避免如果用户想在令牌和刷新令牌过期时使用该应用程序,则他需要再次输入他的凭据。使用 Authorization Code Grant Flow 处理此问题的最佳方法是什么?非常感谢。

快速回答是,当刷新令牌过期时,唯一的办法是让用户重新输入凭据。

以防其他人对更多细节感兴趣:

如果您使用的是 ADAL,则应该减少用户在第一次输入凭据后的需要。每当 ADAL 从服务器获取访问令牌时,它也会获取 'refresh token'。当原始访问令牌到期时,可以将刷新令牌交换为新的访问令牌和新的刷新令牌。兑换刷新令牌是完全静默完成的,只要刷新令牌仍然有效,就永远不会要求用户提供凭据。

如果您使用的是 ADAL,则永远不需要知道发生了这种情况。 Android 和 iOS ADAL 库都维护访问令牌和刷新令牌的缓存。当您调用 acquireToken 时,ADAL 将首先检查其缓存以查看是否存在任何有效的访问令牌。如果当前没有有效的访问令牌,它将查看是否有可用于获取新访问令牌的刷新令牌。换句话说,它将尽一切可能避免提示用户输入凭据。为了利用此行为,您只需在每次需要令牌时调用 acquireToken。除非您有一些特殊要求,否则没有理由在单次使用后保留该令牌。每次需要再次使用访问令牌时,只需调用 ADAL。

但是,如果不使用,AAD 刷新令牌将在大约 14 天后过期。每个新的刷新令牌都会重新开始 14 天的时钟。这总共有效 90 天。但 90 天后,用户将必须再次输入凭据。

对于 ADFS,刷新令牌的有效期甚至更短,大约 24 小时,除非登录来自已注册的设备。