【问题标题】:SCIM (System for Cross-domain Identity Management) library for C#C# 的 SCIM(跨域身份管理系统)库
【发布时间】:2013-04-29 17:16:14
【问题描述】:

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

它旨在取代旧的 SPML 协议。

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

我在 Google 上搜索的大部分内容都是针对 Java 的,否则似乎不太活跃。

更新:

回应评论:

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

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

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

【问题讨论】:

  • 只是指出已经有一些关于 SO 的 SCIM / Java 问题。
  • 这当然取决于您在后端使用什么来进行用户管理? SCIM 只定义了模式和 REST API。 WebApi 可以在不需要任何框架的情况下完成大部分工作。
  • 您是否试图找到一个库来处理 SCIM 对象(例如用户)的创建/序列化/反序列化,而不是一些进行 REST 调用的实现?我也一直在寻找,到目前为止运气不佳-有点惊讶:(
  • 是的 - 用户 CRUD 的东西。

标签: c# .net identity scim


【解决方案1】:

我推荐SimpleIdServer.Scim https://github.com/simpleidserver/SimpleIdServer 作为替代方案。我最终没有使用 web api,但它仍然可以满足我的需求。

【讨论】:

  • 不幸的是,他们的文档不是那么好。您是实现了自己的存储,还是让他们将其存储在 SQL 服务器中,然后读取以供您自己使用?
  • 我最终编写了自己的数据存储,但它不公开
  • Spencer,您是否设法摆脱了所有非数据表(如模式)和一切无痛的东西,还是坚持将所有内容保留在 DB 模型中?
  • 我没有使用任何数据表或模式。我只使用了查询/过滤方法。
【解决方案2】:

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

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 或将其放入系统之前轻松创建新用户对象并设置其属性等。

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&lt;string, object&gt;,但工厂无法正确使用它。

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

此外,我相信图书馆可以根据需要处理请求的创建(而不是自己制作它们,这似乎确实很简单),这是项目作者(Craig McMurtry)的另一个 sn-p

/* 
 * 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,他在尝试让我启动并运行库方面非常有帮助 - 所以我不必自己手工制作模型类。

【讨论】:

【解决方案3】:

请评估开源项目https://github.com/PowerDMS/Owin.Scim。我一直在领导这项开发工作。虽然它缺少一些微软已经很好地实现的功能,但它在 scim 的大多数其他领域都更加完整。看看它是否符合您的需求,我们欢迎所有反馈来帮助塑造 owin.scim 的未来。

【讨论】:

  • 嗨,Daniel,我正在比较不同的 SCIM 实现。在过去的 3 年中,Owin.Scim 没有新版本,文档中缺少一些功能,还有一些等待拉取请求和一些问题。这仍然是一个活跃的项目吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 2020-10-21
  • 2010-12-02
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多