Я создаю образец приложения (то есть доказательство концепции) для создания пользователей с платформой Okta. Я использую вызовы API, но постоянно получаю сообщение «ПЛОХОЙ ЗАПРОС» при запуске приложения C # MVC из Visual Studio 2013 с обновлением 5 до моего экземпляра разработки Okta. Мне интересно, связана ли проблема между CORS и локальным приложением?
Вот что у меня есть на данный момент:
Протестировал вызовы API с помощью Postman в моей среде разработки, и вызовы работают (т.е. пользователи создаются в моей среде администратора Okta dev)
Создайте токен API и вызовите его с префиксом «SSWS» в заголовке авторизации.
Использование методов
HttpClient
и.PostAsJsonAsync()
для вызова APIМой код приложения работает должным образом при вызове GET с вызовом API
/api/v1/users?limit=25
и.GetAsync()
Используя следующий вызов Api: / api / v1 / users? Activate = false (создать пользователя с паролем; это работает в Postman, но не в приложении MVC)
Используется http://json2csharp.com/ для создания классов C #, которые соответствуют иерархии JSON Okta (полученные из Okta Postman API библиотеки)
Используя приведенные выше классы, JSON, отображаемый в средстве просмотра текста Visual Studio (полученный при пошаговом выполнении кода), работает с вызовом POST при вставке в Postman.
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 в Postman, и поскольку этот JSON оказывается действительным при использовании JSONLint, я думаю, что проблема не в JSON, а в безопасности между моим локальным приложением и средой разработки. Следует ли запускать этот тест только из размещенного приложения, чтобы сайт можно было явно назначить в разделе CORS административной среды Okta? На данный момент, а я все еще исследую и экспериментирую, я не уверен, что мне не хватает, но я думаю, что близок.
Будем очень признательны за любые советы или рекомендации! Спасибо!
headers
для объектаclient
? - person Searching   schedule 08.11.2016