当前,由我们的SPA(运行在Azure VM中的本地Web应用程序)从Azure AD获取访问令牌的隐式授予流URL的格式为:
https://login.microsoftonline.com/{{tenantID}}/oauth2/authorize?response_type={{responseParams}}&client_id={{applicationID}}&redirect_uri={{redirectUri}}
在这里,responseParams = id_token是Adal.js传递的默认值。要从Azure AD取回刷新令牌,需要对该URL进行哪些更改?
答案 0 :(得分:1)
隐式授予流不会发出刷新令牌,主要是出于安全原因。刷新令牌的范围不如访问令牌窄,它赋予了更多的权力,因此一旦泄漏出去,将造成更大的破坏。在隐式流中,令牌是在URL中传递的,因此被拦截的风险要比授权代码授予中的高。
但是,JavaScript应用程序可以使用另一种机制来更新访问令牌,而无需反复提示用户输入凭据。应用程序可以使用隐藏的iframe对Azure AD的授权终结点执行新的令牌请求:只要浏览器仍然对Azure AD域具有活动会话(读取:具有会话cookie),身份验证请求就可以成功发生无需用户交互。
此模型授予JavaScript应用程序独立更新访问令牌的能力,甚至可以为新的API获取新的访问令牌(前提是用户先前同意它们。这避免了获取,维护和保护高价值的额外负担)可以进行静默续订的工件(Azure AD会话cookie)在应用程序外部进行管理。这种方法的另一个优点是,用户可以使用已签名的任何应用程序从Azure AD登出进入运行在任何浏览器选项卡中的Azure AD。这将导致Azure AD会话cookie的删除,并且JavaScript应用程序将自动失去为已注销用户续签令牌的功能。
参考:Understanding the OAuth2 implicit grant flow in Azure Active Directory (AD)