使用Azure Active Directory验证客户端应用程序

时间:2015-05-22 08:51:47

标签: wpf authentication azure active-directory azure-api-apps

美好的一天!

我正在尝试以这样一种方式配置我的Azure API应用程序,使其只能由受信任的应用程序使用Azure AD(公共身份验证)进行访问。我在AD中为WPF应用程序和我的API应用程序创建了实体。我给了WPF应用程序的实体权限,可以访问我的API应用程序。我使用以下方法来访问我的API。

        public Task<string> COGetOrganisationsAsync()
        {
            if(adAuth == null) adAuth = new coADAuthentication(ClientID, RedirectURL, Authority, ResourceURI);

            string token = adAuth.AcquireTokenOrRefresh();

            using(HttpClient httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                Uri requestURI = new Uri(new Uri(Authority), "Organization/GetAll"); 
                HttpRequestMessage httpRequest = new HttpRequestMessage(new HttpMethod("POST"), requestURI);
                var req = httpClient.PostAsync(requestURI, httpRequest.Content).ContinueWith(httpResponseMessage =>
                {
                    return httpResponseMessage.Result.Content.ReadAsStringAsync();
                });

                return req.Result;
         }

我成功收到了一个有效的令牌,我将其添加到标题中。我的req.Result在以下消息中

  

{“status”:403,“source”:“https://serviceplan-resourceg01234567890abcdef.azurewebsites.net/MyMethod/GetAll”,   “message”:“服务权限”myService \“设置为公开   auth但没有与请求相关联的身份验证。“}

状态403告诉我服务器确实收到了我的请求,但它是禁止的..代码工作正常,因为当我将身份验证更改为public时,我会收到正确的数据。

我不确定我的Azure AD是否配置正确,但我一直在寻找几天的解决方案.Azure文档分散,过时或对我的特定场景无用。

我的问题是,是否有其他人有同样的问题,是否有人可能会建议我一些有用的文档?

非常感谢!

2 个答案:

答案 0 :(得分:1)

对不起,您很难找到所需要的东西。对于您必须在网关上启用和配置的许多提供商,App Service API应用程序都支持开箱即用。然后,生活在网关后面的服务将具有身份验证,并且它们将共享相同的身份验证提供程序(当然,如果它们配置为公共身份验证),那么API App A的调用者将无需重新进行身份验证即可访问API App乙

您可以在Protect an API app: Add Azure Active Directory or social provider authentication

找到分步指南

话虽如此,引起混淆或过时的文章是什么?我们正努力使这些文章尽可能具有发现性,因此任何反馈都将有助于我们改进。

答案 1 :(得分:0)

API应用程序平台使用&#34; zumo令牌&#34;来抽象API应用程序的身份验证。我们的想法是,无论您想使用哪种身份验证提供程序,如AAD,Facebook,Google,Twitter或Microsoft帐户,它(通常)都会对您的客户端代码透明。一般流程是

  1. 您可以配置管理API应用的网关,以使用您想要的身份验证提供程序。在你的情况下,AAD。
  2. 您要求用户登录https:/// login / aad
  3. 这会将AAD令牌放入网关并返回一个zumo令牌
  4. 您的客户端代码然后获取zumo令牌并使用它来调用API应用
  5. Panagiotis指出的

    http://azure.microsoft.com/en-us/documentation/articles/app-service-api-dotnet-add-authentication/有详细信息。