已发布的 WebAPI 中的 Azure AD 身份验证不起作用

Azure AD authentication in published WebAPI not working

我正在尝试将 Azure Active Directory 身份验证添加到我的 ASP.NET WebAPI。 我按照 this tutorial 并在 Azure 中正确配置了我的 tenantapplications

现在,如果我使用 sample desktop client 在本地进行测试,身份验证有效,我可以看到经过身份验证的用户的声明。

User.Identity.IsAuthenticated = true

但是,如果我将 API 发布到 Azure(作为 Web 应用程序),身份验证似乎不再有效,即使使用完全相同的代码来测试 API在本地...我唯一需要更改的是我的 API:

的端点
<add key="ApiBaseAddress" value="http://localhost:20105/" />

<add key="ApiBaseAddress" value="https://***.azurewebsites.net/" />

注意 传递给 API 的 JWT 令牌在本地测试我的 API 和发布时完全相同,因为它们正在对 API 进行身份验证相同的 Azure AD 和相同的用户帐户。

这个问题的根源可能是什么? 难道是azure用的是https而我本地是http上的运行?如果是这样,我可以尝试如何解决这个问题?

似乎在发布到 Azure 时,我 web.config 中的一些 Azure AD 特定配置值被替换了...

如果启用组织身份验证,您可以选择现有的 AD,但部署只是以与我不同的方式添加了配置值。

取消选中此选项并自行解决问题

这可能是由于您发布 API 所遵循的流程所致。如果您从 Visual Studio 发布并使用 "organizational" 设置,发布逻辑将在 Azure AD 中为您的云托管 Web API 实例创建一个新应用程序并相应地更改受众设置.因此,您还需要匹配请求令牌的逻辑中的那些更改 - 您需要使用与资源标识符相同的受众为您的 API 请求令牌,否则您最终将获得本地主机的令牌基于部署并将其发送到您的云实例,该实例将拒绝它。 您可以通过在将您的应用程序发布到网站时选择不使用组织设置来避免这种情况 - 这将保持受众不变并允许您对本地和云实例无差别地使用令牌。