从c# MVC应用程序调用Okta API时接收到错误的请求

本文关键字:错误 请求 API MVC 应用程序 调用 Okta | 更新日期: 2023-09-27 18:17:12

我正在创建一个示例应用程序(即概念验证),用于使用Okta平台创建用户。我正在使用API调用,但在从Visual Studio 2013更新5运行c# MVC应用程序到我的Okta开发实例时,始终收到"BAD REQUEST"。我想知道问题是否存在于CORS和本地应用程序之间?

到目前为止我写的是:

  • 使用Postman测试API调用到我的开发环境和调用工作(即,用户在我的Okta开发管理环境中创建)

  • 创建一个API令牌,并在授权头

  • 中使用前缀"SSWS"调用它
  • 使用HttpClient.PostAsJsonAsync()方法进行API调用

  • 当使用API调用/api/v1/users?limit=25.GetAsync()调用GET时,我的应用程序代码按预期工作

  • 使用以下Api调用:/Api/v1/users?激活=false(创建一个带有密码的用户;

  • 使用http://json2csharp.com/创建符合Okta JSON层次结构的c#类(从Okta的Postman API库获得)

  • 使用上面的类,在Visual Studio的文本查看器中显示的JSON(在分步执行代码时获得)在粘贴到Postman

  • 时与POST调用一起工作。
  • HttpResponse包含错误信息" the request body was not well-formed"

下面是用于创建和序列化(使用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":"user@test.org","login":"user@test.org"},"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,而在于我的本地应用程序和开发环境之间的安全性。是否应该只在托管应用程序中运行此测试,以便在Okta管理环境的CORS部分中显式地分配站点?在这一点上,我仍在研究和实验,我不确定我错过了什么,但我想我已经接近了。

任何建议或指导将不胜感激!谢谢你!

从c# MVC应用程序调用Okta API时接收到错误的请求

我建议您使用Okta c# SDK,您可以使用Okta. core . client NuGet包将其添加到您的应用程序中。

一个示例控制台应用程序展示了如何使用它来创建Okta用户:https://github.com/oktadeveloper/okta-sdk-dotnet-console-user-create

我希望这对你有帮助!