2016-11-08 4 views
0

Я создаю образец приложения (т. Е. Доказательство концепции) для создания пользователей с платформой 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? На данный момент, и я все еще исследую и экспериментирую, я не уверен, что мне не хватает, но я думаю, что я рядом.

Любые советы или рекомендации были бы очень признательны! Спасибо!

+0

Можете ли вы проверить правильность установки 'headers' для объекта' client'? – Searching

+0

@ Поиск - Да, я так думаю; Я обновил сообщение и включил создание заголовка Accept. – ewomack

+0

@ewomack Вы пытались использовать Okta C# SDK вместо прямого вызова API? (Https://www.nuget.org/packages/Okta.Core.Client/). Вы найдете 2 примера кода командной строки, как использовать этот SDK с API аутентификации и пользователей в https://github.com/oktadeveloper, и в этом SDK есть метод UsersClient.Add. Сообщите мне, если это поможет! –

ответ

1

Я рекомендую вам использовать Okta C# SDK, который вы можете добавить в приложение, используя Okta.Core.Client NuGet package.

Пример консольного приложения показывает, как использовать его для create Okta users: https://github.com/oktadeveloper/okta-sdk-dotnet-console-user-create

Я надеюсь, что это помогает!

+0

Мне удалось создать (в основном) желаемый сценарий с помощью Okta SDK, используя следующие строки кода: User OktaReturnUser = OktaClient.GetUsersClient(). Добавить (OktaSendUser, false); OktaClient.GetUsersClient(). Активировать (OktaReturnUser, true); Они создают поэтапного пользователя, а затем отправляют электронную почту, чтобы задать вопрос о сбросе безопасности/пароля. Это было проще, чем проблемы, с которыми я столкнулся, с прямым API. – ewomack

+0

Это правильные вызовы через C# SDK :-) Рад узнать, что это сработало для вас! –