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...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, dein problem ist letztlich, wie Sie die Einrichtung der AuthorizationHeader und eventuell, wie Ihr ServerWebApi reagiert auf die Anfrage.
Werfen Sie einen Blick auf dieser blog. Ich glaube, das ist die Lösung, die Sie suchen.
Ich bin auch vor dem ähnlichen Problem und warten auf die Lösung.
Aber als eine Arbeit um die ich erstellt habe als unten. Ich bin sicher, es ist vielleicht nicht angemessen lösen.
Bessere Empfehlungen für die Antwort wäre sicherlich hilft uns.
Schritt1: Hinzugefügt die folgende Zeile zu Registrieren-Methode WebApiConfig.cs
Schritt 2: ( Hinweis: unter die Umsetzung ist In Arbeit wie bereits erwähnt in den Kommentaren)
===================================================================================================
Hinweis:
Passive Föderation:
Wenn wir es schaffen, MVC-Projekt in VS2013 und .NET4.5.1 es wird eine persistence-local-db in die Projekt-und speichern Sie alle Authentifizierungs-details.
Wohl nicht die Optimierung dieses passive Föderation für die aktive Föderation besonders persistent-storage-Sicht.
Unten-Klassen automatisch generiert werden.
Zusätzliche Zeile -> IdentityConfig.ConfigureIdentity();
In Global.asax.cs Application_Start()
Config-Datei-Einträge.