在名为test113.onmicrosoft.com

时间:2016-03-17 11:21:21

标签: c# azure office365 azure-active-directory

我必须针对Azure AD对应用程序进行身份验证。我创建了Web API并将其添加到Azure AD应用程序部分。更改了清单文件,创建了Web API并使用Azure AD进行了身份验证,并创建了一个Windows窗体,其中包含以下代码:

 private async void button1_Click(object sender, EventArgs e)
 {
    string authority = "https://login.windows.net/test113.onmicrosoft.com";
    string resourceURI = "https://test113.onmicrosoft.com/ftp";
    string clientID = "5177ef76-cbb4-43a8-a7d0-899d3e886b34";
    Uri returnURI = new Uri("http://keoftp");

    AuthenticationContext authContext =
        new AuthenticationContext(authority);
    AuthenticationResult authResult =
        authContext.AcquireToken(resourceURI, clientID, returnURI);

    string authHeader = authResult.CreateAuthorizationHeader();

    // don't do this in prod
    System.Net.ServicePointManager.ServerCertificateValidationCallback =
            ((s, c, c2, se) => true);

    HttpClient client = new HttpClient();
    HttpRequestMessage request =
        new HttpRequestMessage(HttpMethod.Get, "https://localhost:44300/api/tasks");
    request.Headers.TryAddWithoutValidation("Authorization", authHeader);
    var response = await client.SendAsync(request);
    string responseString = await response.Content.ReadAsStringAsync();
    MessageBox.Show(responseString);
}

我有例外:

  

类型的例外   'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException'   发生在Microsoft.IdentityModel.Clients.ActiveDirectory.dll但是   未在用户代码中处理

     

其他信息:AADSTS50001:名为的应用程序   在名为的租户中找不到https://test113.onmicrosoft.com/ftp   test113.onmicrosoft.com。如果应用程序没有,则会发生这种情况   由租户管理员安装或同意   租户中的任何用户。您可能已发送了身份验证   请求错误的租客。

     

跟踪ID:e782d60e-b861-46a3-b32b-f3df78396bd0   相关ID:   b4809815-2755-4de1-bd1b-0221d74fd0f0时间戳:2016-03-17 11:20:08Z

1 个答案:

答案 0 :(得分:11)

请求中的资源表示您要在特定租户中访问的资源。当本机客户端需要从Azure Active Directory获取令牌时,它需要指定它需要令牌的资源。在此方案中,客户端应用程序需要访问Web API,因此Web API的 APP ID URI将用作资源名称。在拥有令牌之后,它还需要知道可以访问资源的URL,在这种情况下是Web API的地址。例如:

// Resource settings this application wants to access
private string resource = "https://cloudalloc.com/CloudAlloc.WebAPI";
private Uri WebAPIUri = new Uri("https://localhost:44313");

这些设置都可以在Azure管理门户中的Web API应用程序的CONFIGURE页面的单点登录部分找到。

点击here了解详情。