作为SCIM(跨域身份管理系统)标准的新手,请原谅我的无知之处,因为我正处于学习过程中,试图弄清楚如何对提供用户,删除用户和修改用户进行干净/简单的请求。我正在尝试使用C#/。NET使用System.Net.Http.HttpClient通过SCIM向用户发出HTTP REST请求https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx我可以成功完成此操作,并从服务器获取JSON响应,但是为了轻松读取和处理响应对象,我想对其进行反序列化。.在尝试使用JsonConvert,dynamic等等。我偶然发现了一个Microsoft nuget库,该库似乎暗示它很有用。遗憾的是,似乎没有任何文档*更新:其中一位作者用指向博客文章的链接更新了nuget页面,该文章以某种方式解释了用法。Microsoft.SystemForCrossDomainIdentityManagementhttps://www.nuget.org/packages/Microsoft.SystemForCrossDomainIdentityManagement/我试图从中获取数据的SCIM提供者是Facebook,使用他们在其网站上发布的通过电子邮件获取用户的示例:https://developers.facebook.com/docs/facebook-at-work/provisioning/scim-api#getuserbyemail这是C#中的代码示例,试图从SCIM服务中获取用户并反序列化它们。我发现返回的queryResponse在属性填充时正确反序列化,但是作为第一个也是唯一的资源对象的Core1EnterpriseUser具有null / default属性。var userName = "[email protected]";var response = await client.GetAsync($"Users?filter=userName%20eq%20%22{userName}%22");if (response.IsSuccessStatusCode){ var json = await response.Content.ReadAsStringAsync(); var jsonResponseProperties = await Task.Factory.StartNew(() => { return JsonConvert.DeserializeObject<Dictionary<string, object>>(json); }); var userFactory = new QueryResponseJsonDeserializingFactory<Core1EnterpriseUser>(); var queryResponse = userFactory.Create(jsonResponseProperties); if (queryResponse.TotalResults == 1) { var user = queryResponse.Resources.First(); var id = user.Identifier; // this and other properties are null/false etc. }}这是我查询服务时返回的JSON示例:{ "schemas": [ "urn:scim:schemas:core:1.0" ], "totalResults": 1, "itemsPerPage": 10, "startIndex": 1, "Resources": [ { "schemas": [ "urn:scim:schemas:core:1.0", "urn:scim:schemas:extension:enterprise:1.0", "urn:scim:schemas:extension:facebook:starttermdates:1.0", "urn:scim:schemas:extension:facebook:suppressclaimemail:1.0" ], "id": 180383108978226, "userName": "foo.bar\u0040foobar.com", "name": { "formatted": "Foo Bar", "familyName": "Bar", "givenName": "Foo" }, "title": "Vice President", "active": true, "emails": [ { "primary": false, "type": "work", "value": "foo.bar\u0040foobar.com" } ], "urn:scim:schemas:extension:enterprise:1.0": { "department": "IT" }, "urn:scim:schemas:extension:facebook:starttermdates:1.0": { "startDate": 0, "termDate": 0 } } ]}更新:我正在与该项目的一位作者进行对话,他友善地在这篇博客文章中指出了我:http://blogs.technet.com/b/ad/archive/2015/11/23/azure-ad-helping-you-adding-scim-support-to-your-applications.aspx他还更新了nuget库,该库现在包括对SCIM v1的支持,还指出,由于JSON数据表明Facebook使用的版本为v1:"urn:scim:schemas:core:1.0",所以我现在可以使用Core1而不是尝试使用类(我将上面的问题更新为使用Core2)。目前,我仍然无法正确回答反序列化的问题,并会在我掌握更多信息的情况下更新该问题。同样,如果很显然它不容易工作,则不必使用该库,因为我知道对nuget的简短说明表明它是为Azure AD创建的。但是,我很感激关于如何/应该完成这种事情的任何建议,因为我敢肯定,有很多人在使用SCIM-您如何解析您的回复/生成您的请求,以便您拥有实际的对象?您是否可以自动解析架构的响应,以便使用正确的属性来扩展对象?我昨晚很晚才手工制作一些模型类来处理响应对象-我似乎确实在工作。如果我无法使nuget库正常工作(首选选项),那么我将不得不使用自己的库。 :/再次感谢彼得斯基 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 尽管对于SCIM的最佳实践我仍然不明智,但我设法使代码现在可以正常工作了-非常感谢nuget库的一位作者Microsoft的Craig McMurtry!在此过程中需要解决一些问题,例如nuget软件包已更新为包括以前对较早的v1 SCIM对象的支持。但是,这是基于我所问问题的示例的一小段代码,但事实证明它正在使用Newtonsoft序列化程序。 :(在该行上方的代码中:var jsonResponseProperties = await Task.Factory.StartNew(() => { return JsonConvert.DeserializeObject<Dictionary<string, object>>(json); });被替换为:var jsonResponseProperties = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);等等!我的对象的属性现在反序列化... (adsbygoogle = window.adsbygoogle || []).push({});
08-28 19:51