我无法将我们的 ReactJS 应用程序中的 Azure Active Directory 访问控制链接到我们的 API,并且阅读有关此问题的文档给我留下的问题多于答案。
我首先按照 AAD单页应用场景中的说明开始操作,这很简单,允许我登录到我之前提到的网络上的 AAD 帐户。效果很好。
但是,在配置我们的 NodeJS API 时,我看到了两个选项:调用 Web API 的 Web 应用程序和受保护的 Web API。
在调用 Web API 的 Web 应用程序中,注册很简单,让我相信这是要走的路,但是代码配置页面指出仅支持 ASP、Java 和 Python。我找不到任何适用于此场景的 JavaScript 示例,因此我转向受保护的 Web API。
同样,虽然我发现注册部分很容易理解,但代码配置页面仅列出了 .NET、NodeJS(但仅适用于 App Functions,而不是独立 API)和 Python 中的示例。鉴于 NodeJS 示例与独立 API 非常接近,我跟随该代码,在适当的地方替换我们的配置选项,因为它使用了我在其他地方看到的并且之前尝试实现的passport-azure-ad包。但是,在这两种情况下,每次尝试对受保护的端点进行 API 调用都会导致 API 记录以下内容:
“身份验证失败,原因是:在 Strategy.prototype.jwtVerify:无法验证令牌”</p>
此外,我不确定这可能有多相关,但我注意到当我在 ReactJS 应用程序上解码 ID Token 和 Access Token 时,ID Token 版本是 2.0,但 Access Token 是 1.0。通过 Github Issues 和 StackOverflow 进行搜索表明其他人也观察到了这种行为,尽管我无法复制他们的流程以获得 v2.0 访问令牌,我怀疑这是无法使用的原因。 NodeJS API 来验证令牌。
哦,我在客户端中使用 MSAL.js 1.3 和 2.0 beta 时观察到了相同的行为,以防万一。