2017-10-24 5 views
2

Wir haben eine von Azure gehostete On-Premise-Instanz von Dynamics 2016, die als IFD ausgeführt wird und ADFS-Authentifizierung verwendet. Wir haben jetzt eine Anforderung für eine von Azure gehostete API, über die CRM-Web-API mit der Dynamics-Instanz zu kommunizieren. Um dies zu erreichen, müssen wir uns mithilfe der OAuth-Authentifizierung mithilfe von ADAL wie hier beschrieben authentifizieren https://msdn.microsoft.com/en-gb/library/gg327838.aspx, unter Verwendung der Microsoft.IdentityModel.Clients.ActiveDirectory-Bibliothek. Wir haben den folgenden Code ein Token von ADFSCRM Web Api ADFS OAuth

var resource = "https://reosurce.com/"; 
var clientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; 
var authProvider = "https://adfs.server.com/adfs/oauth2/token"; 
var redirectUri = "https://crm2Environment.com/"; 

var authContext = new AuthenticationContext(authProvider, false); 
var authToken = authContext.AcquireTokenAsync(resource, clientId, new 
Uri(redirectUri), new PlatformParameters(PromptBehavior.Always)). 
Result.AccessToken; 

Das Codebeispiel läuft erfolgreich abzurufen, jedoch zur Verwendung in einem interaktiven Strömungssituation ist und sobald die AcquireTokenAsync Methode erscheint Login-Dialog aufgerufen wird (macht Sinn, da, wie Ansonsten weiß ADFS, ob es in Ordnung ist, zu authentifizieren), aber dies wird offensichtlich nicht auf der API funktionieren, die domänenunabhängig ist und es keine Möglichkeit gibt, Anmeldeinformationen an ADFS weiterzuleiten (nicht dass wir das sowieso wollen). Keine der alternativen Überladungen der AcquireTokenAsync-Methode scheint in der beschriebenen Situation auf ADFS anwendbar zu sein (aber offen für Vorschläge). Fehlt uns etwas? Gibt es eine andere Möglichkeit, das Token mit einem nicht interaktiven Flow abzurufen/ohne die Authentifizierung des Domänenkontos zu verwenden? Beachten Sie, dass die für Azure AD verfügbaren Beispiele im ADFS-Szenario nicht zu funktionieren scheinen und wir auch keinen Zugriff auf den aktuellen ADSF-Server haben oder haben, da dies von unserem Infrastrukturteam verwaltet wird (obwohl dies erforderlich ist) Machen Sie Änderungen am ADFS, das ist möglich)

Antwort

0

Werfen Sie einen Blick auf MSI (Managed Service Identity). Dies ist ein neues Kommunikationsprotokoll für Azure-to-Azure-Dienste.

Managed Service Identity (MSI) for Azure resources

Wie Sie diese Forschung, versuchen Sie nicht mit dem alten Muster in Verwirrung zu fallen (die für Dienst-für-AzureService Kommunikation noch gültig ist) Hier können Sie eine ClientId/ClientSecret/URL auf Azure erzeugen das gibt Berechtigungen, dann teilen Sie diese Werte mit der Anwendung, die Zugriff erfordert. Hier ein Beispiel dafür: Use Azure Key Vault from a Web Application Das Beispiel demonstriert die Verbindung mit Azure Key Vault, aber es könnte ein beliebiger Azure-Dienst sein, der die Azure Active Directory-Authentifizierung verwendet.

+0

Azure zu Azure-Diensten wird in dieser Situation nicht helfen, da das CRM vor Ort ist und IFD über ADFS – cirrus42

1

Welche Version von ADFS verwenden Sie?

Wenn ADFS 4.0 und der Fluss Server zu Server ist (klingt wie es ist) verwenden Sie Client-Anmeldeinformationen, die das Wissen eines geheimen Schlüssels - kein Login/Kennwort verwendet.

Gute Verbindung here.

+0

Sein ADFS 3.0 unter Windows Server 2012 ausgeführt – cirrus42

+1

Sorry - dieser Ablauf wird in ADFS 3.0 nicht unterstützt. – nzpcmad

+1

Dies sollte als die richtige Antwort markiert werden. – davidcarr

Verwandte Themen