c# - 如何在 ASP.NET Core 中使用 XML 架构反序列化自定义 Claim.ValueType
问题描述
我正在考虑重构我在过去 2 年中担任当前职位的所有应用程序的身份验证和授权流程,因为我非常厌倦为每个应用程序一遍又一遍地编写本质上相同的管理面板;我正在考虑一个集中的用户管理 web 应用程序,它将为生态系统中的所有其他应用程序提供声明:.NET Desktop、ASP.NET 和 ASP.NET Core。
考虑到应用程序的多样性,这些声明应至少包括:
- 应用程序域名(同一用户可以访问不同的应用程序)
- 该应用程序的角色(同一用户可以是应用程序的管理员,但可以是另一个应用程序的简单用户)
- 用户可以读取的一组组(每个应用程序域一个集合)
- 用户可以拥有写入权限的组集合(每个应用程序域一个集合)
现在,官方文档说明了Claim.ValueType
这一点:
如果您的解决方案需要复杂的值类型,建议您在 ValueType 属性中使用标准 XML 模式类型来指示 Value 属性是如何从字符串序列化和反序列化的
假设我成功地创建了一个 XML 模式(以前从未做过,这是我正在处理的事情)并且我即将使用这个重载的构造函数方法创建声明:
public Claim (string type, string value, string valueType, string issuer);
同样,.NET API 说
Type 属性是一个字符串(通常是一个 URI),其中包含有关声明的语义信息;它告诉您索赔的价值意味着什么。例如,声明类型为 GivenName(“ http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname ”)的声明表示用户的名字。Type 属性的值可以是在 ClaimTypes 类中定义的众所周知的声明类型之一,也可以是颁发者定义的任意 URI。例如,“urn:spendinglimit”的声明类型可能表示在发行者的业务上下文中有意义的用户属性。
这是我无法将所有字符串放在一起的地方:我如何使用该架构?我已经读过 URI 字符串也可以只是一个即时组成的字符串,但是鉴于我正在编写自定义模式,它是否应该包含某种用于实际创建声明的参考?如果是这种情况,我如何将真实文件转换为似乎并不指向任何东西的东西(我试图追踪所有内置类型的 URI,全是空白)?这个模式如何帮助存储声明,或者 - 在这一点上,混乱程度非常高 - 我如何存储它们?
解决方案
推荐阅读
- android - 如何设置普通类中包含的 id 接口(非活动)
- flutter - 颤振问题:本机崩溃
- powershell - 在 powershell 工作流中传递凭据
- bootstrap-4 - 引导分页更新当前页面仅更新服务器端。我想要所有页面更新所以如何确定分页日期
- python - 标准化后显示网络输出的问题
- java - JAVA Regex - 如何过滤掉长度大于某个数字的整个字符串?
- reactjs - setState 不是从 CreateableSelect 的 onChange 方法触发的
- python - 使用哪个索引来访问 defaultdict 中的项目
- slack-api - 在 Conversations.History 中查找过去 14 天的消息
- timer - 如何在我的游戏中添加一个在我的角色死亡时不会重置的计时器