从 Web App 调用两个不同的受 Azure AD 保护的 API

Call two distinct Azure AD protected APIs from Web App

设置:

在 Web 应用程序中,在 Katana 中,OWIN 中间件:

现在一切都很好,我可以使用访问令牌作为 Bearer 并调用 Microsoft Graph 并获取 /me 用户个人资料、图片等等。

但是我如何从我的 Web 应用程序调用我自己的受保护的 Azure AD API?

我不能只将授权码第二次换成另一个 resourceId。我可以 context.AcquireTokenAsync() 使用 app_idapp_secret,但是我取回的 JWT 不包含任何 user 身份声明,所以现在我的 API 对调用用户一无所知,它只知道机密客户端(我的 Web 应用程序)确实提供了有效令牌。

我如何请求一个可以成功调用我的 API 的令牌,该令牌将 return 某种用户 声明 用户主体名称用户ID可能就足够了。

我应该将所有 Microsoft Graph 调用逻辑移动到 WebAPI 并为我的 API 的 resourceId 交换授权码,还是有一个就地解决方案我的难题?这里的正确模式是什么?好吧,不是 ,也许 更好

您可以为另一个 API.

请求具有相同授权码的第二个访问令牌

根据您请求访问令牌的方式,令牌的受众可能是 API 的客户端 ID 或应用程序 ID URI。因此,您必须确保两者都是 API.

中接受的受众

如果是ASP.NET Core APIs,可以在JWT Bearer authentication config中添加如下内容:

TokenValidationParameters = new TokenValidationParameters
{
    ValidAudiences = new [] { "https://blabla", "g-u-i-d" }
}