Я пытаюсь получить доступ к функции Azure из плагина Dynamics 365 через сервис-вызов службы: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-service-to-service
Эта функция защищена с помощью Аутентификация службы приложения .
Я создал приложение Function и включил аутентификацию службы приложений в разделе Функции платформы -> Аутентификация / Авторизация.Я включил Azure Active Directory в качестве поставщика аутентификации и установил режим управления на Экспресс
![enter image description here](https://i.stack.imgur.com/3hAyg.png)
Затем я получил сгенерированный идентификатор клиента и секрет клиента из расширенного режима:
![enter image description here](https://i.stack.imgur.com/kUNrG.png)
Видимо, это все, что нужно для запроса токена для функции Azure на основе статьи, в которой мне нужно 4 обязательных параметра:
Идентификатор клиента
Секрет клиента
Тип предоставления
Ресурс
Я делаю следующий запрос для создания токена из плагина Dynamics 365но получите следующее сообщение об ошибке:
Invalid Plugin Execution Exception: Microsoft.Xrm.Sdk.InvalidPluginExecutionException: {"error":"invalid_client","error_description":"AADSTS70002: Error validating credentials. AADSTS50012: Invalid client secret is provided.\r\nTrace ID: 06ddda7f-2996-4c9b-ab7e-b685ee933700\r\nCorrelation ID: d582e2f2-91eb-4595-b44b-e95f42f2f071\r\nTimestamp: 2018-05-23 06:30:58Z","error_codes":[70002,50012],"timestamp":"2018-05-23 06:30:58Z","trace_id":"06ddda7f-2996-4c9b-ab7e-b685ee933700","correlation_id":"d582e2f2-91eb-4595-b44b-e95f42f2f071"}-The remote server returned an error: (401) Unauthorized.
Мой код:
var tokenendpoint = "https://login.microsoftonline.com/de194c13-5ff7-4085-91c3-ac06fb869f28/oauth2/token";
var reqstring = "client_id=" + Uri.EscapeDataString("5f315431-e4da-4f68-be77-4e257b1b9295");
reqstring += "&client_secret=" + Uri.EscapeDataString("/oK7nh8pl+LImBxjm+L7WsQdyILErysOdjpzvA9g9JA=");
reqstring += "&resource=" + Uri.EscapeUriString("https://keyvaultaccess.azurewebsites.net");
reqstring += "&grant_type=client_credentials";
//Token request
WebRequest req = WebRequest.Create(tokenendpoint);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(reqstring);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
//Token response
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader tokenreader = new StreamReader(resp.GetResponseStream());
string responseBody = tokenreader.ReadToEnd();
Я убедился, что у меня есть правильный Client Secret, и также закодировал его, поскольку где-то читал, что«+» и «/» не годятся.
Я получаю ту же ошибку в Почтальоне
Есть идеи ??