Azure Active Directory-WebApi - Server-zu-Server

Ich versuche mich zu authentifizieren mehrere clients (die Verbindung von einem windows-server-Anwendung - ohne browser) Zugriff auf meine .Net4.51 webAPI mit azure active directory.

Habe ich erstellt ein Azure AD Anwendung für meinen webapi als "ServerWebApi" und konfiguriert meine webapi code der Anwendung zu zeigen, um es in der webConfig mit der folgenden app-Einstellungen.

<add key="ida:Tenant" value="myDomainName.onmicrosoft.com" />
<add key="ida:Audience" value="https://myDomainName.onmicrosoft.com/ServerWebApi" />
<add key="ida:ClientID" value="<client id>" />

So, wenn ein request mit einem token, sollten Sie diese Einstellungen überprüfen Sie die token gegen mein AD-WebApi-Anwendung namens ServerWebApi.

Nun jedem Kunden die Möglichkeit zu bekommen, ein token, den ich erstellt habe eine Azure-Anwendung für jeden client. (Ich nicht, erstellen Sie es als eine native app, sondern als eine webapi app, so dass ich eine separate Taste für jeden client). Ich habe auch meine eigentliche webAPI Anwendung (ServerWebApi) in Azure in die Liste der "Web-APIs zugreifen, die von dieser Anwendung". (Für dieses Beispiel meine erste client aufgerufen wird myClientWebApiApp)

So, jetzt mein client kann erfolgreich Anfrage ein token von seiner client-App im AD, aber wenn es sendet an den server (webapi), bekomme ich eine 401 - Unauthorized scheitern. Also ich nehme an ich bin fehlerhaften Validierung der token gegen meine Azure AD ServerWebApi webApi.

Dem client app-code, den ich verwenden, um die token und rufe meine webApi ist wie folgt

//Create an ADAL AuthenticationContext object and link it to my tennant domain myDomainName.onmicrosoft.com
var authority = ConfigurationManager.AppSettings["Tenant"];
authenticationContext = new AuthenticationContext(authority);

//Client Cerdential Object used while Acquiring a token from Windows Azure AD
ClientCredential clientCred = new ClientCredential(clientId, clientSecret);

//Invoke AuthenticationContext.AcquireToken to obtain an AccessToken. 
//Uses previously-created ClientCredential to authenticate
authenticationResult = authenticationContext.AcquireToken(resource, clientCred);

httpClient.DefaultRequestHeaders.Clear();
//Add authorization header to HttpClient
httpClient.DefaultRequestHeaders.Authorization = new        AuthenticationHeaderValue("Bearer",authenticationResult.AccessToken);

var data = "new Value";

//Call the Service web api to update                    
HttpResponseMessage response = httpClient.PostAsJsonAsync(resourceurl + "api/Values", data).Result;

Werden und verwendet folgende config-Einstellungen

<add key="Tenant" value="https://login.windows.net/myDomainName.onmicrosoft.com"/>
<add key="ClientId" value= "<client id>"/>
<add key="ClientSecret" value= "<client secret>"/>
<add key="ResourceUrl" value="https://localhost:44300/"/>
<add key="AppIdUri" value="https://myDomainName.onmicrosoft.com/myClientWebApiApp"/>

Die Client-Id ist, dass der Client webapi Anwendung, die ich erstellt und das ClientSecret ist ein Schlüssel erstellt habe ich vor, die Anwendung in Azure AD.

Weiß jemand, ob das was ich mache möglich ist und wenn ja, was mache ich falsch?

  • bitte stellen Sie sicher, dass Sie nicht nach echten client-API-keys! Das internet ist ein beängstigender Ort...
InformationsquelleAutor martin | 2014-02-15
Schreibe einen Kommentar