Я создаю образец приложения (т. Е. Доказательство концепции) для создания пользователей с платформой Okta. Я использую вызовы API, но последовательно получаю «НЕОБХОДИМЫЙ ЗАПРОС» при запуске приложения C# MVC из обновления 5 для Visual Studio 2013 в мой экземпляр разработки Okta. Мне интересно, существует ли проблема между CORS и местным приложением?Получение BAD REQUEST при вызове Okta API из приложения C# MVC
Вот то, что я до сих пор:
Испытан из вызовов API с помощью почтальону в моем Dev среду и вызовы работают (то есть, пользователи получают созданный в моем окте среды DEV администратора)
Создал API Токен и вызвать его с префиксом «ССШН» в заголовке Authorization
Использование метода
HttpClient
и.PostAsJsonAsync()
, чтобы сделать вызов APIМой код приложения работает должным образом при вызове GET с API вызова
/api/v1/users?limit=25
и.GetAsync()
Используя следующий Api вызов:?/API/v1/пользователей активировать = ЛОЖЬ (создать пользователя с паролем; это работает в Почтальон, но не в приложении MVC)
Используется http://json2csharp.com/ для создания классов C#, которые соответствуют иерархии JSON окта в (полученных из библиотек API Почтальон окта в)
Использование классов выше, JSON отображается в Text Viewer Visual Studio, (полученный при пошаговом выполнении коды) работает с вызовом POST при вставке в Почтальоны
HttpResponse
содержит сообщение об ошибке «тело запроса не было хорошо сформированными»
Вот код, используемый для создания и сериализации (с Json.NET) классы C#:
RootObject root = new RootObject();
root.profile = new Profile();
root.profile.firstName = model.FirstName;
root.profile.lastName = model.LastName;
root.profile.email = model.Email;
root.profile.login = model.UserName;
root.credentials = new Credentials();
root.credentials.password = new OktaTest.Models.Password();
root.credentials.password.value = model.Password;
string rootJson = JsonConvert.SerializeObject(root);
Это приводит следующий JSON (это содержит фиктивные данные):
{"profile":{"firstName":"Test","lastName":"User","email":"[email protected]","login":"[email protected]"},"credentials":{"password":{"value":"Testing123"}}}
Здесь строка кода, что делает POST вызов:
HttpResponseMessage responseMessage = await client.PostAsJsonAsync(url, rootJson);
Вот строка, которая задает заголовок Accept:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Поскольку я могу использовать JSON в Почтальон, и так как JSON выходит как действует при использовании JSONLint, я думаю, что проблема заключается не в формате JSON, но что-то вокруг безопасности между моим местным приложением и среды разработки. Должен ли этот тест запускаться только из размещенного приложения, чтобы сайт мог быть явно назначен в разделе CORS среды Okta admin? На данный момент, и я все еще исследую и экспериментирую, я не уверен, что мне не хватает, но я думаю, что я рядом.
Любые советы или рекомендации были бы очень признательны! Спасибо!
Можете ли вы проверить правильность установки 'headers' для объекта' client'? – Searching
@ Поиск - Да, я так думаю; Я обновил сообщение и включил создание заголовка Accept. – ewomack
@ewomack Вы пытались использовать Okta C# SDK вместо прямого вызова API? (Https://www.nuget.org/packages/Okta.Core.Client/). Вы найдете 2 примера кода командной строки, как использовать этот SDK с API аутентификации и пользователей в https://github.com/oktadeveloper, и в этом SDK есть метод UsersClient.Add. Сообщите мне, если это поможет! –