C# 用于C的SCIM(跨域身份管理系统)库#

C# 用于C的SCIM(跨域身份管理系统)库#,c#,.net,identity,scim,C#,.net,Identity,Scim,创建SCIM标准是为了简化云中的用户管理,它定义了一个用于表示用户和组的模式,以及一个用于所有必要CRUD操作的RESTAPI 它旨在取代旧的SPML协议 有没有“成熟”的C#库 我在谷歌上搜索到的大部分内容都是针对Java的,否则就不太活跃了 更新: 针对该评论: 这些库通常采用以下形式: User = new User; User.name = "name"; ... etc ... User.Create; 换句话说,它通过使用模型用户隐藏底层实现。这样,您就不必担心实际协议的细节。我更

创建SCIM标准是为了简化云中的用户管理,它定义了一个用于表示用户和组的模式,以及一个用于所有必要CRUD操作的RESTAPI

它旨在取代旧的SPML协议

有没有“成熟”的C#库

我在谷歌上搜索到的大部分内容都是针对Java的,否则就不太活跃了

更新:

针对该评论:

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

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

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

我更新了我的原始答案,希望能提供一些更好的信息

A)这个库应该(希望)是您想要的:

Microsoft.SystemforCrossDomainIdentity管理

该项目的一位作者最近将其更新为包含v1和v2 SCIM对象支持,您的博客文章链接完全正确,说明了该库的用途

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

下面是一个基于GET请求(到Facebook)对用户进行反序列化的示例,您可以轻松创建一个新的用户对象,并在发布或放入系统之前设置其属性等

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
        }
    }
}

我希望这一切都能有所帮助,非常感谢微软的Craig McMurtry,他一直在帮助我建立并运行这个库,所以我不必手工制作我自己的所有模型类。

请评估这个开源项目。我一直在领导这项开发工作。虽然它缺少了一些微软已经很好地实现的功能,但它在scim的大多数其他领域都要完善得多。看看它是否符合您的需要,我们欢迎所有反馈意见,以帮助塑造owin.scim的未来。

我推荐
SimpleIdServer.scim
作为替代方案。我最终没有使用web api,但它仍然满足了我的需要。

只是想指出,在这方面已经存在一些SCIM/Java问题。这当然取决于您在后端使用什么进行用户管理?SCIM只是定义了schema&restapi。WebApi可以在不需要任何框架的情况下完成大部分工作。您是否试图找到一个库来处理SCIM对象(如用户)的创建/序列化/反序列化,而不是进行REST调用的一些实现?我也一直在寻找,到目前为止运气不太好-有点惊讶:(是的-与用户CRUD有关的内容。这可能与/nzpcmad有很好的联系:你说得完全正确,我联系了nuget项目的作者,我正在与他们进行对话。我将更新我的答案,希望能提供一些帮助。博客帖子不见了!:(你可以在这里找到存档的博客文章,它或多或少会将你引向azure文档(最近也更新过)嗨@peteski,你的答案在GET request中有效,如何在PATCH request中实现同样的效果,有什么想法吗?
var jsonDictionary = await Task.Factory.StartNew(() => { return JsonConvert.DeserializeObject<Dictionary<string, object>>(json); });
/* 
 * 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");