oauth-2.0 - ADAL.js 是否支持带有 PKCE 扩展的新授权代码授予?
问题描述
根据https://oauth.net/2/grant-types/implicit/上的新安全指南,不建议使用隐式流。由于 ADAL.js 使用了隐式流,会不会受到影响,新应用是否建议使用 ADAL.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 客户端凭据授予流程,它提供了获取反映分配给应用程序本身权限的令牌的能力。
推荐阅读
- javascript - 返回语句中的 OR 条件
- jmeter - 如何使用 1000 个用户(1 个命令/用户)使用 1 个 ssh 连接使用 jmeter 达到 1000 个 ssh 命令
- reactjs - react-stockcharts:以小宽度(< 150px)渲染会破坏聊天
- android - ObservableField 还是 LiveData?哪一个是最好的?
- c# - 在 C# 中更改或添加列表的索引类型
- android - android中带有房间数据库的多线程
- java - 如何处理 jersy jaxrs 中的横切关注点
- yii2 - PJAX 后 YII2 可编辑列不起作用
- javascript - Ionic 3 Popover 点击外部行为
- javascript - 在循环中仅隐藏孩子的父类