0

我无法将我们的 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 时观察到了相同的行为,以防万一。

4

1 回答 1

2

评论讨论帮助我发现了一个在 MSAL 示例和文档中没有明确说明的解决方案,即登录请求中的任何 MS Graph 范围(例如:“User.Read”)都会将访问令牌从 v2.0 降级到 v1.0,这就是我收到带有 v1.0 访问令牌的 v2.0 ID 令牌的原因。

我从登录请求中删除了所有 Graph 范围,仅剩下 API 范围,因此以下登录返回了 v2.0 访问令牌,该令牌随后由 API 验证并启用了经过身份验证的访问。

于 2020-06-29T12:39:00.130 回答