2016-03-17 21 views
6

Muszę uwierzytelnić aplikację przeciwko usłudze Azure AD. Stworzyłem web API i dodałem go do sekcji aplikacji Azure AD. Zmieniono plik manifestu, stworzył API internetową i uwierzytelnione z AD Azure i stworzył postać systemu Windows, zawierający następujący kod:Aplikacja o nazwie HTTPS://test113.onmicrosoft.com/FTP nie została znaleziona w dzierżawie o nazwie test113.onmicrosoft.com

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); 
} 

Mam wyjątek:

wyjątek typu „Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException” wystąpił w Microsoft.IdentityModel.Clients.ActiveDirectory.dll ale nie było obsługiwane w kodzie użytkownika

Dodatkowe informacje: AADSTS5000 1: Aplikacja o nazwie https://test113.onmicrosoft.com/ftp nie została znaleziona u dzierżawcy o nazwie test113.onmicrosoft.com. Może się tak zdarzyć, jeśli aplikacja nie została zainstalowana przez administratora najemcy lub nie została przez nią zaakceptowana przez żadnego użytkownika najemcy. Możliwe, że wysłałeś żądanie uwierzytelnienia do niewłaściwego najemcy.

śledzenia ID: e782d60e-b861-46a3-B32B-f3df78396bd0 korelacji ID: b4809815-2755-4de1-bd1b-0221d74fd0f0 znacznika czasu: 17.03.2016 11: 20: 08Z

+2

Nie wiem, dlaczego używasz 'https: // test113.onmicrosoft.com/ftp' jako resourceURI. Zwykle używam 'https: // management.core.windows.net /' do zarządzania usługą Azure oraz 'https: // graph.windows.net' dla Graph API. –

Odpowiedz

4

zasobów na żądanie oznacza zasób, do którego chcesz uzyskać dostęp w danym najemcy. Gdy klient natywny musi pobrać token z usługi Azure Active Directory, musi określić zasób, dla którego ma otrzymać token. W tym scenariuszu aplikacja kliencka żąda dostępu do interfejsu Web API, aby identyfikator URI identyfikatora aplikacji dla interfejsu API WWW był używany jako nazwa zasobu. Po to ma token też musi wiedzieć URL, pod którym można uzyskać dostępu do zasobów, w tym przypadku adres WWW API.For przykład:

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

Oba te ustawienia można znaleźć w pojedynczym znakiem -na sekcji strony KONFIGURACJA dla aplikacji Web API w portalu Azure Management.

Aby uzyskać więcej informacji, kliknij here.

+0

Hi Nan, wszystko, co widzę w sekcji konfiguracji to nazwa, identyfikator klienta, redirecturils i logo. nie widzę identyfikatora URI identyfikatora APP – Rinu

+0

Chciałem tylko wspomnieć, że korzystam z NATYWIDUALNEGO APLIKACJI KLIENTA – Rinu

+0

@ Rinu, identyfikator tej aplikacji znajduje się na stronie konfiguracji web api. –