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

时间:2016-01-28 10:19:10

标签: azure authentication asp.net-web-api azure-active-directory adal

我正在尝试将Azure Active Directory身份验证添加到我的ASP.NET WebAPI中。 我关注this tutorial并在Azure中正确配置了租户应用

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

User.Identity.IsAuthenticated = true

但是,如果我将我的API发布到Azure(作为Web应用程序),那么身份验证似乎不再起作用,即使使用完全相同的代码来本地测试API ...只有我必须这样做change是我的API的终点:

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

VS

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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