node.js - Microsoft 身份授权代码流和使用 JWT 签名验证的多个应用程序注册
问题描述
我一直在试图弄清楚如何对来自单页应用程序的基于用户的令牌进行 API JWT 令牌签名验证,该应用程序与利用 Microsoft 身份平台的多个 RESTful 资源 API 交互。SPA 的认证使用授权码流。每个应用程序(SPA 和两个 RESTful API)都有自己的应用程序注册(即单独的客户端 ID)
根据阅读(Microsoft Graph API 授权错误:Invalid Audience),如果您将 client_id(即 WebUI (clientid1) 到资源 API (clientid2))交叉,您似乎已经添加了一个与 API 关联的附加范围 - (即 api:// 72b2..../位置...)。如果不这样做,API 上的签名验证将失败。这是使用 jsonwebtoken 库验证令牌的示例代码片段
jwt.verify(token.trim(), this._public_key, { algorithms: list_algorithms }, (err, decoded) => {
if (err) {
return reject(err);
}
resolve(decoded);
});
此外,SPA 中范围的定义仅限于一个 API,因此如果您有多个 API,则无法在 SPA 中添加额外的 API 范围。因此,我遇到了挑战。
Angular 12.0 SPA 利用库 angular-oauth2-oidc,API 是基于 NodeJS / Express 的应用程序,我可以完全控制源代码。
使用 PingFederate 和 OAuth 等其他身份平台,我能够毫无问题地在 API 中进行 JWT 签名验证。
由于 Microsoft 不支持自省(https://docs.microsoft.com/en-us/answers/questions/115061/does-azure-provide-any-oauth-2-token-introspection.html),我觉得这是一个重要的检查。
如果无法进行此验证,我很可能必须设置一个代理 API 来管理与不同资源 API 的交互,而不是在我的 SPA 中管理它。
如果您需要更多信息或代码,我可以提供,我会立即提供。
解决方案
推荐阅读
- reactjs - TypeError:null 不是对象(评估'RNRandomBytes.seed')React Native
- kuzzle - 错误:无法连接到位于 127.0.0.1:7512 的 kuzzle 服务器:连接丢失。(ws 状态=503)
- join - Apache Flink:我们可以从窗口连接应用函数中获取 windowStartTime 和 windowEndTime 吗?
- gatling - Gatling tryMax 即使重试成功也报错
- css - :nth-child (或类似)公式仅在存在少于三个子元素时才隐藏 div (需要是 CSS)
- c++ - 无法在不敏感的情况下比较字符串/字符(错误 - 未找到方法)
- pandas - Pandas:如何根据多个条件创建新列?
- reactjs - 使用 Touch API 和 Drag API 拖放
- python - python 3.8中字典的pop操作
- elasticsearch - 自动更新 IndexFormat Serilog