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

2024-01-23

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

它旨在取代旧的 SPML 协议。

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

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

Update:

回复评论:

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

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

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


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

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

Microsoft.SystemFor跨域身份管理

https://www.nuget.org/packages/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 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 = "[email protected] /cdn-cgi/l/email-protection";

    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 反序列化器而不是 MS 时遇到了一个问题:

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

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

您可以使用Core2User or Core2EnterpriseUser如果您使用的是 SCIM 规范的 v2,则为类。

此外,我相信如果您愿意,该库可以处理请求的创建(而不是自己制作它们,这看起来确实非常简单),这是该项目作者(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,他在尝试让我启动并运行该库方面提供了很大帮助 - 所以我不必手工制作所有我自己的模型类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • lambda 表达式到函数指针的转换

    这是这个问题的后续问题 Lambda 如何作为参数传递 https stackoverflow com questions 3321283 c0x lambda how can i pass as a parameter 据推测 MSDN
  • File.ReadAllLines 或流读取器

    我们可以使用以下方式读取文件StreamReader http msdn microsoft com en us library vstudio system io streamreader或通过使用File ReadAllLines ht
  • 更新 OSX 命令行工具 6.3 后缺少 C++ 标头 <__debug>

    从 App Store 更新到 Command Line Tools 6 3 后 程序包括
  • 如何使用 C# 调用 REST API?

    这是我到目前为止的代码 public class Class1 private const string URL https sub domain com objects json api key 123 private const str
  • 有没有办法关闭 Hangfire 使用 Serilog 进行的日志记录?

    有没有办法关闭 Hangfire 使用 Serilog 进行的日志记录 我们正在使用我们自己的抽象 我不希望在使用 Serilog 时来自 Hangfire 记录器的所有额外噪音 INIT call under web project na
  • 二元运算符重载、隐式类型转换

    class my bool private bool value public my bool bool value value value explicit operator bool return value friend my boo
  • C++ 为非虚方法指定初始化

    我有 a h 如下所示 class A public void doSomething 0 然后我有 b h 如下所示 include a h class b public A public void doSomething 我只是想通过尝
  • 模板“内联”函数的静态局部变量[重复]

    这个问题在这里已经有答案了 static的局部变量inline如果我的理解是正确的 C 中的函数保证像单个全局变量一样存在 如果inline函数是一个模板 编译器可以在哪里生成该函数的多个版本 下面这篇文章应该很好地回答你的问题 http
  • 加载配置文件时发生错误:访问路径 c:\Program Files (x86)\... 被拒绝

    我有一个在 Windows 7 上使用 Visual Studio 2010 中的安装程序部署的应用程序 该程序在 Windows 7 和 XP 上部署并运行良好 但当我在 Windows 8 系统上部署它时 出现有关访问配置文件的错误 该
  • 谷歌基准迭代的意义是什么?

    我正在使用 Google Benchmark 来测量某些代码的执行时间 例如 我编写了以下代码来测量其执行时间性能 include
  • 访问结构向量

    我有一个结构 struct OutputStore int myINT string mySTRING 如果我创建一个 OutputStore 类型的数组 如下所示 OutputStore OutputFileData new Output
  • 使用 unrar 库 - 将文件提取到文件流缓冲区中

    我需要的是能够将 rar 文件中的文件提取到流中 我正在创建一个测试用例来了解如何使用解压源文件 http www rarlab com rar unrarsrc 3 9 9 tar gz 我已经搜索和修补了一段时间 但我不知道如何使用该库
  • C++头文件问题

    我在处理类时尝试了一些 C 代码 这个问题出现在我身上 并且让我有点烦恼 我创建了一个包含类定义的头文件和一个包含实现的 cpp 文件 如果我在不同的 cpp 文件中使用此类 为什么要包含头文件而不是包含类实现的 cpp 文件 如果我包含类
  • 如何在 C# 中停止程序进一步执行

    string FirstName Console ReadLine if FirstName Length gt 12 Console WriteLine if FirstName Length lt 3 Console WriteLine
  • 使用 System.Json 迭代 JSON

    我正在探索 NET 4 5 的功能System Json库 但没有太多文档 而且由于流行的 JSON NET 库 搜索起来相当棘手 我基本上想知道 我如何循环一些 JSON 例如 People Simon Age 25 Steve Age
  • 在运行时将项目添加到 ToolStrip

    您好 我有一个带有 收藏夹 菜单的 ToolStripMenu 我想在运行时在 WinForms 应用程序中添加子项目 我有一个 datagridview 右键单击它会显示一个包含 添加到收藏夹 选项的上下文菜单 当该事件被触发时 我想使用
  • 具有两个表的谓词构建器

    A Party可以有一个或多个Contact对象 我想选择全部Parties谁的街道名称包含特定关键字 如果我只想搜索Party我可以使用下面的代码 但我如何扩展它来搜索Contact public IQueryable
  • 恐怖分子已弃用

    正在接听另一个问题 https stackoverflow com q 11830514 1468366 我偶然发现了man page http linux die net man 3 herror一个名为的函数herror 看起来很像pe
  • 致命:所有操作都需要OperationId。请为路径的“获取”操作添加它

    我正在使用 AutoRest 从 swagger json 生成 api 的客户端 输出是 AutoRest code generation utility cli version 3 0 6187 node v10 16 3 max me
  • “while(true) { Thread.Sleep }”的原因是什么?

    我有时会遇到以下形式的代码 while true do something Thread Sleep 1000 我想知道这是否被认为是好的做法还是坏的做法以及是否有任何替代方案 通常我在服务的主函数中 找到 这样的代码 我最近在 Windo

随机推荐

  • 如何从“git stash save --all”中恢复?

    我想隐藏未跟踪的文件 但我一直传递错误的选项 对我来说 这听起来是对的 git stash save a all 但这实际上也隐藏了被忽略的文件 正确的是 git stash save u include untracked 当我跑步时gi
  • Pandas-将值设置为空数据框

    我已经初始化了一个空的 pandas 数据框 现在正在尝试填充该数据框 但我一直遇到相同的错误 这是我正在使用的 简化的 代码 import pandas as pd cols list ABC df pd DataFrame column
  • 带有点击处理程序和滚动条的 Google 地图信息框

    我有一个使用 Google Maps javascript API 和 Infobox 插件 本机 InfoWindow 的可自定义版本 的应用程序 它工作得很好 直到我出现以下用例 如果内容很大 我需要一个带有滚动条的信息框 并且它还需要
  • 无法创建 ScriptPluginFactory 类型的服务

    我的 gradle 突然停止工作了 目前的配置是 环境变量为GRADLE HOME 指向Gradle 3 2 1 只需运行命令即可gradle在命令提示符下 我收到以下消息 What went wrong Could not create
  • 如何部署消息排序的pubsub触发云函数?

    我想部署一个带有消息排序的 Pubsub 触发的云函数 https cloud google com pubsub docs ordering https cloud google com pubsub docs ordering gclo
  • 我如何删除 python 2.7,因为我已经在 ubuntu 上安装了 3.6.5?

    我安装了 2 7 和 3 6 5 起初在 ubuntu 18 04 中 唯一可用的 python 版本是 3 6 但在我安装了 numpy 包之后 2 7 也安装了 它变成了默认版本 有什么解决方案可以使 3 6 成为默认值而不是 2 7
  • Zend Forms - 元素 ID 修改以允许重复使用

    我有一个Zend Form我想在一页中多次重复使用的对象 我遇到的问题是每次渲染时它都有相同的元素 ID 我一直无法找到一种方法 可以在每次渲染表单时为所有 ID 提供唯一的前缀或后缀 完整的解决方案 子类Zend Form class M
  • .NET WebApi 如何防止 JSON 的 "$ref": "x" 输出

    我将 Web Api 与实体框架一起使用 我有一个名为 Gift 的控制器 当客户端 GET 的 API 时 我通过使用实体框架从 DB 获取所有 Gifts 并将其作为 JSON 返回 这是我的控制器功能 public List
  • 基于 DNS 的策略,用于在服务器关闭时显示漂亮的“当前离线”页面

    当服务器关闭时 如何使站点自动显示一个漂亮的 当前离线 页面 我的意思是 整个服务器关闭并且请求无法到达 IIS 手动更改 DNS 不是一个选项 Edit 我正在寻找某种 DNS 技巧来重定向到其他服务器 以防主服务器出现故障 我可以对 D
  • 如何设置 HTML5 范围输入的样式,使其在滑块前后具有不同的颜色?

    我希望左侧为绿色 右侧为灰色 如上图所示就完美了 最好是纯 CSS 解决方案 只需要担心 WebKit 这样的事可能吗 Pure CSS解决方案 Chrome 隐藏溢出input range 并填充剩余的所有空间 带有阴影颜色的拇指 IE
  • 为什么即使在配置之后 Git 也不允许我提交?

    这个问题看起来像是重复的 但事实并非如此 只是一个不断重复的细微差别 git 不断告诉我 请告诉我你是谁 即使在设置之后也是如此 当我跑步时git commit 这就是我得到的 git commit Please tell me who y
  • 我可以使用 JQuery 从 web.config 读取数据吗?

    我可以使用 JQuery 从 web config 读取数据吗 Jquery 是在浏览器中运行的 javascript 您的 web config 驻留在您的服务器上 如果您想公开 web config 中的数据 我认为您应该创建某种可以从
  • 编译错误:“stoi”不是“std”的成员

    My code include
  • Perl 6 中的递归正则表达式?

    我一直在试图弄清楚如何在 Perl 6 中执行递归正则表达式 对于一个玩具示例 平衡括号匹配器 它将匹配 inside PCRE https regex101 com r otEKh5 1例子 R Onigmo https rubular
  • 拖放图像

    我需要在 swing 中创建一个拖放系统 其中被拖动物体的图像在拖动过程中附加到光标上 理论上这是可以实现的 public Icon TransferHandler getVisualRepresentation Transferable
  • Altair - 无法获取折线图中某一层的工具提示

    当我绘制由两组线组成的分层图表时 某一层中的工具提示不显示 这也发生在 VL 编辑器中 任何有关为什么会发生这种情况的见解都将不胜感激 这是一个可重现的示例来演示该问题 实际上我在第一层有更多行 牛郎星版本 4 0 0 df pd Data
  • 如何删除 php 字符串中的%符号

    我需要从目录中的文件或图像名称中删除 符号 我使用哪个字符串 oldfile wallpapers temp uploaded file newfile wallpapers temp uploaded trim str replace f
  • 记录还是不记录?

    我现在正在构建一个程序 它是一个电子书管理器 阅读器 组织者和出版商 这也是一个电子书传输 到像 Kindle 这样的电子阅读器 但我正在开发它 一个问题突然出现在我的脑海中 日志或不 然后我开始考虑日志 由于许多程序都会记录操作 我开始寻
  • 使用Python os.walk来识别文件列表[重复]

    这个问题在这里已经有答案了 可能的重复 在Python中 在具有特定扩展名的目录中构建文件列表的最快方法 https stackoverflow com questions 8625908 in python fastest way to
  • 用于 C# 的 SCIM(跨域身份管理系统)库

    SCIM 标准的创建是为了通过定义表示用户和组的架构以及用于所有必要的 CRUD 操作的 REST API 来简化云中的用户管理 它旨在取代旧的 SPML 协议 有没有 成熟 的 C 库 我在 google 上搜索的大部分内容都是针对 Ja