首页 > 解决方案 > ADAL.js 是否支持带有 PKCE 扩展的新授权代码授予?

问题描述

根据https://oauth.net/2/grant-types/implicit/上的新安全指南,不建议使用隐式流。由于 ADAL.js 使用了隐式流,会不会受到影响,新应用是否建议使用 ADAL.js 隐式流?

标签: oauth-2.0adal.js

解决方案


是的,我同意根据新指南,不建议使用隐式流程。目前,ADAL js 使用 OAuth 2.0 隐式流程,出于安全原因,它不返回刷新令牌(刷新令牌的生命周期比访问令牌长,因此在恶意行为者手中更危险)。

它旨在在请求令牌的资源与客户端应用程序相同时返回 ID 令牌。返回 ID 令牌时,它由库缓存。因此,当我们使用authenticationContext.acquireToken(resource, callback)时,它允许应用程序静默获取令牌,而无需再次提示用户。ADAL js 使用隐藏的 Iframe 向 Azure AD 发出令牌请求。

但是要使用 PKCE 流,我们可以通过传递code_challenge以及正文中的其他参数来对https://login.microsoftonline.com/tenant_id/outh2/authorize端点进行 http post 调用,并获取授权码。并使用该代码并通过传递code_verifier以及正文中的其他参数来调用https://login.microsoftonline.com/tenant_id/outh2/token端点并获取令牌。

如果您使用的是 SPA,并且没有后端组件或打算通过 JavaScript 调用 Web API,请使用 OAuth 2.0 隐式授权流程。但是如果你有一个后端组件并且你正在使用后端代码中的一个 API,那么隐式流就不适合了。在这种情况下,您可以使用 OAuth2.0 身份验证代码授予流程或 OAuth2.0 客户端凭据授予流程,它提供了获取反映分配给应用程序本身权限的令牌的能力。


推荐阅读