Azure Active Directory同意框架没有为.NET客户端应用程序提供支持

时间:2017-01-05 01:06:43

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

我在Azure Web App中运行了一个Web API。它用于.NET WinForms客户端应用程序。在同一个Azure Web App中,还有一个ASP.NET MVC站点。

用户使用Azure AD凭据对站点和.NET客户端进行身份验证。这应该是多租户。 MVC应用程序运行良好的多租户,但我无法让客户端运行多租户。

我对https://docs.microsoft.com/en-us/azure/active-directory/active-directory-integrating-applications的理解是,如果使用OAuth 2.0,则同意框架应自动启动。我正在使用与https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-webapi-multitenant-windows-store/处的示例非常接近的代码(下方)。

虽然我可以成功登录定义了本机应用程序的租户中的用户并使用该应用程序,但我无法将该应用程序与其他租户的用户一起使用。没有征得同意,我得到了AdalException:

AADSTS50001: The application named https://<myurl> was not found in the tenant named <sometenant>.onmicrosoft.com.  This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant.  You might have sent your authentication request to the wrong tenant.
Trace ID: 3<snip>2
Correlation ID: 2<snip>a
Timestamp: 2017-01-05 01:01:10Z

我已将原生客户端应用的ID添加到网络应用清单中的knownClientApplications列表中。我正在对“普通”租户进行身份验证(https://login.microsoftonline.com/common)。登录的第三方租户用户帐户是该租户中的全局管理员。

所以,我显然忽略了启用同意框架的内容,但我无法根据样本找到它...

以下相关的本机客户端代码

Uri RedirectUri = new Uri(sRedirectUri);
// AadInstance is the common tenant
AuthenticationContext authContext = new AuthenticationContext(AadInstance);

try
{
    PlatformParameters pp = new PlatformParameters(PromptBehavior.Auto);
    // Authenticate to Azure AD
    Program.WebApiAuthenticationResult = await authContext.AcquireTokenAsync(WebAppIdUri, ClientID, RedirectUri, pp);
    return true;
}
catch (AdalException ex)
{
    MessageBox.Show(ex.Message, "Log In Not Successful");
}

感谢您的任何见解!

1 个答案:

答案 0 :(得分:0)

我试图重现这个问题,但失败了。当我使用多租户帐户登录本机应用程序时,本机客户端应用程序使用由Azure保护的Web API的方案运行良好。我测试了here的代码示例。

根据错误消息,似乎资源不正确,请确保它与您注册的网络API应用的 APP ID URI 相同在Azure上。当我指定错误的资源时,我可能会收到相同的错误消息。