首页 > 解决方案 > 如何在 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,全是空白)?这个模式如何帮助存储声明,或者 - 在这一点上,混乱程度非常高 - 我如何存储它们?

标签: c#asp.netasp.net-corexsdclaims-based-identity

解决方案


推荐阅读