作爲SCIM(跨域身份管理系統)標準的新成員,請原諒任何無知,因爲我在學習過程中試圖弄清楚如何向/提供用戶,刪除用戶和修改用戶。SCI中的SCIM反序列化問題
我試圖用C#/。NET進行HTTP REST請求通過SCIM用戶,使用System.Net.Http.HttpClient
https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx
我能成功地做到這一點,並從服務器得到JSON響應,但是爲了輕鬆讀取響應對象並對其進行操作,我想反序列化它。在嘗試使用諸如JsonConvert
,dynamic
等等的東西之後,我偶然發現了一個微軟的nuget庫,它似乎暗示它是有用的。可悲的是有沒有出現任何文檔它*
更新: 作者之一已與鏈接到一個博客張貼這在某種程度上能夠解釋使用更新的NuGet頁面。
Microsoft.SystemForCrossDomainIdentityManagement
https://www.nuget.org/packages/Microsoft.SystemForCrossDomainIdentityManagement/
的SCIM提供商我試圖獲取數據從Facebook的是,使用他們在其網站上公佈的例子以通過電子郵件得到一個用戶:
https://developers.facebook.com/docs/facebook-at-work/provisioning/scim-api#getuserbyemail
這是C#中的一個代碼示例,它試圖從SCIM服務中獲取用戶並且需要ialize他們。我發現我回來的queryResponse
在屬性填充時正確反序列化,但是Core1EnterpriseUser
是第一個也是唯一的資源對象,具有空值/默認屬性。
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
}
}
]
}
UPDATE:
我在對話框我用的作者之一該項目,他慷慨地指着我在這篇博客文章:
他還更新了現在包含對SCIM v1支持的nuget庫,並指出由於JSON數據顯示Facebook使用的版本是v1:"urn:scim:schemas:core:1.0"
,所以現在我可以使用Core1
而不是嘗試使用Core2
類(我已經更新了上面的問題以使用Core1EnterpriseUser
)。
我仍然無法得到我目前的反應反序列化正確,並將更新與我擁有更多信息的問題。
再次,我不有使用這個庫,如果它變得顯而易見,它不容易去工作,因爲我知道nuget的簡要說明表明它是爲Azure AD創建的。
但是,我很感激任何關於如何完成這類事情的建議,因爲我確定必須有很多人使用SCIM - 你如何解析你的響應/生成你的請求你有實際的物體?你能否自動解析模式的響應,以便用正確的屬性擴充對象?
昨天晚上我起牀很晚,手工製作了一些模型類來處理響應對象 - 我似乎有工作。如果我無法使nuget庫工作(首選選項),那麼我將不得不自己去。 :/
再次感謝 peteski
請檢查答案!在:https://stackoverflow.com/questions/45729018/deserialize-facebook-workplace-scim-rest-api-response/45730105#45730105 –