首页 > 解决方案 > 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 中管理它。

如果您需要更多信息或代码,我可以提供,我会立即提供。

标签: node.jsjwtidentitysignature

解决方案


推荐阅读