gpt4 book ai didi

c# - C# 的 SCIM(跨域身份管理系统)库

转载 作者:太空狗 更新时间:2023-10-29 20:17:20 26 4
gpt4 key购买 nike

SCIM 标准的创建是为了通过定义表示用户和组的架构以及用于所有必要的 CRUD 操作的 REST API 来简化云中的用户管理。

它旨在取代旧的 SPML 协议(protocol)。

有没有“成熟”的 C# 库?

我用谷歌搜索过的大部分内容都是针对 Java 的,否则看起来不是很活跃。

更新:

回应评论:

这些库通常采用以下形式:

User = new User;
User.name = "name";
... etc ...
User.Create;

换句话说,它通过使用模型用户来隐藏底层实现。这样您就不必担心实际协议(protocol)的细节。

最佳答案

我已经更新了原来的答案,希望能提供一些更好的信息。

A) 这个库应该(希望)是您正在寻找的:

Microsoft.SystemForCrossDomainIdentityManagement

https://www.nuget.org/packages/Microsoft.SystemForCrossDomainIdentityManagement/

该项目的一位作者最近更新了它以包括 v1 和 v2 SCIM 对象支持,您的博客文章链接完全正确,解释了库的用途。

http://blogs.technet.com/b/ad/archive/2015/11/23/azure-ad-helping-you-adding-scim-support-to-your-applications.aspx

(作者现在将此添加到 nuget 的摘要中,这样在阅读博文之前找到 nuget 库的人就不会像我一样困惑)。

这里是一个基于 GET 请求(到 Facebook)反序列化用户的示例,您可以轻松地创建一个新的用户对象并在将其 POST 或 PUT 放入系统之前设置其属性等。

public static async Task GetUser()
{
var oauthToken = "123456789foo";
var baseUrl = "https://www.facebook.com/company/1234567890/scim/";
var userName = "foo@bar.com";

using (var client = new HttpClient())
{
// Set up client and configure for things like oauthToken which need to go on each request
client.BaseAddress = new Uri(baseUrl);

// Spoof User-Agent to keep Facebook happy
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", oauthToken);

try
{
var response = await client.GetAsync($"Users?filter=userName%20eq%20%22{userName}%22");
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();

// This is the part which is using the nuget library I referenced
var jsonDictionary = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);
var queryResponse = new QueryResponseJsonDeserializingFactory<Core1EnterpriseUser>().Create(jsonDictionary);
var user = queryResponse.Resources.First();
}
catch (Exception ex)
{
// TODO: handle exception
}
}
}

我最初使用 Newtonsoft deserialzier 而不是 MS 时遇到了一个问题:

var jsonDictionary = await Task.Factory.StartNew(() => { return JsonConvert.DeserializeObject<Dictionary<string, object>>(json); });

返回了一个 Dictionary<string, object> 但工厂无法正确使用它。

如果您使用的是 SCIM 规范的 v2,则可以使用 Core2UserCore2EnterpriseUser 类。

此外,我相信如果您愿意,库可以处理请求的创建(而不是自己制作它们,这看起来确实非常简单),这是项目作者 (Craig McMurtry) 的另一个片段

/* 
* SampleProvider() is included in the Service library.
* Its SampleResource property provides a 2.0 enterprise user with values
* set according to the samples in the 2.0 schema specification.
*/
var resource = new SampleProvider().SampleResource;

// ComposePostRequest() is an extension method on the Resource class provided by the Protocols library.
request = resource.ComposePostRequest("http://localhost:9000");

我希望这一切都有帮助,非常感谢 Microsoft 的 Craig McMurtry,他在尝试让我启动和运行库方面提供了很大帮助 - 所以我不必自己手工制作模型类。

关于c# - C# 的 SCIM(跨域身份管理系统)库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16390464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com