[Gelöst] Token von Azure holen
Verfasst: 30. November 2022 13:06
Hallo zusammen,
ich möchte mittels NAV2017 ein Token von Azure holen. Jedoch funktioniert es nicht. Ich habe zuerst die Funktionen aus CU 1297 benutzt, jedoch ohne Erfolg. Also habe ich den Aufruf vereinfacht in C# umgesetzt und danach diesen in C/Al übertragen. In C# funktioniert der Aufruf. Aktuell stehe ich aber etwas auf dem Schlauch. Hat jemand eine Idee, woran es liegen könnte das es in NAV nicht funktioniert?
C/Al Code:
Fehler bei "myResponse := myRequest.GetResponse;":
Microsoft Dynamics NAV
---------------------------
Unterbrechen bei Fehlermeldung:
Fehler bei einem Aufruf von System.Net.HttpWebRequest.GetResponse mit folgender Meldung: Der Remoteserver hat einen Fehler zurückgegeben: (400) Ungültige Anforderung.
---------------------------
OK
---------------------------
C# Code der das gewünschte Ergebnis erzielt :
Ich freu mich auf das Feedback.
ich möchte mittels NAV2017 ein Token von Azure holen. Jedoch funktioniert es nicht. Ich habe zuerst die Funktionen aus CU 1297 benutzt, jedoch ohne Erfolg. Also habe ich den Aufruf vereinfacht in C# umgesetzt und danach diesen in C/Al übertragen. In C# funktioniert der Aufruf. Aktuell stehe ich aber etwas auf dem Schlauch. Hat jemand eine Idee, woran es liegen könnte das es in NAV nicht funktioniert?
C/Al Code:
- Code:
[TryFunction]
LOCAL PROCEDURE GetAuthToken2@1000000130();
VAR
URL@1000000000 : Text;
RequestBody@1000000007 : Text;
myRequest@1000000014 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebRequest";
RequestStream@1000000016 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.Stream";
AuthStreamWriter@1000000015 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.StreamWriter";
Encoding@1000000017 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.Encoding";
myResponse@1000000018 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse";
BEGIN
URL := 'https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxxxx/oauth2/token';
myRequest := myRequest.Create(URL);
myRequest.Method := 'POST';
myRequest.ContentType := 'application/x-www-form-urlencoded';
myRequest.Timeout := 30000;
RequestStream := myRequest.GetRequestStream();
RequestBody := 'client_id=xxxxxxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx&grant_type=client_credentials&redirect_uri=https%3A%2F%2Flocalhost&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default';
AuthStreamWriter := AuthStreamWriter.StreamWriter(RequestStream,Encoding.UTF8);
AuthStreamWriter.Write(RequestBody);
AuthStreamWriter.Flush;
AuthStreamWriter.Close;
AuthStreamWriter.Dispose;
myResponse := myRequest.GetResponse;
END;
Fehler bei "myResponse := myRequest.GetResponse;":
Microsoft Dynamics NAV
---------------------------
Unterbrechen bei Fehlermeldung:
Fehler bei einem Aufruf von System.Net.HttpWebRequest.GetResponse mit folgender Meldung: Der Remoteserver hat einen Fehler zurückgegeben: (400) Ungültige Anforderung.
---------------------------
OK
---------------------------
C# Code der das gewünschte Ergebnis erzielt :
- Code:
public string GetAuthTokenResponse()
{
string URL = "https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxxxx/oauth2/token";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.Timeout = 30000;
Stream RequestStream = myRequest.GetRequestStream();
string RequestBody = "client_id=xxxxxxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx&grant_type=client_credentials&redirect_uri=https%3A%2F%2Flocalhost&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default";
StreamWriter AuthStreamWriter = new StreamWriter(RequestStream, Encoding.UTF8);
AuthStreamWriter.Write(RequestBody);
AuthStreamWriter.Flush();
AuthStreamWriter.Close();
AuthStreamWriter.Dispose();
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
Stream myResponseStream = myResponse.GetResponseStream();
StreamReader myReader = new StreamReader(myResponseStream, Encoding.UTF8);
return myReader.ReadToEnd();
}
Ich freu mich auf das Feedback.