【发布时间】:2014-09-11 00:14:26
【问题描述】:
我正在开发一个使用 Asp.Net 5 MVC、Owin 和 Oauth2 不记名令牌作为身份验证类型的 Web 应用程序。
我需要使用自定义声明类型在 System.Security.Claims.Claim 中存储字符串列表 "CODEFOO,CODBAR,CODEX,.."。
当用户请求令牌时,此“用户代码”列表将从后端获取,并使用特定的自定义声明类型设置在身份内部。
当用户通过特定的 MVC 操作发送回令牌时,应用程序必须检查声明中的用户代码列表是否包含特定代码。
List<string> userCodes = rep.GetUserCodeFromBackEnd();
string userCodesClaimType = "http://foo.it/claim/usercodesclaimtype";
现在我正在序列化 JSON 中的字符串列表。
var claim = new Claim(userCodesCaimType, JsonConvert.SerializeObject(userCodes));
然后用这样的方式反序列化它:
var userCodesClaim = identity.Claims.FirstOrDefault<Claim>(c=>c.Type == userCodesClaimType) ;
var userCodesClaimValue = JsonConvert.DeserializeObject<List<string>>(userCodesClaim.Value);
现在的问题:
有没有更好的方法在声明中存储值列表?
Claim 有一个 ValueType 属性,文档说:
ValueType 属性包含一个标识类型的字符串 值的信息。这个属性可以用来理解 值的格式并提供有关如何序列化的信息 并反序列化该值。如果您的解决方案需要复杂的价值 类型,建议您在 ValueType 属性以指示 Value 属性的含义 从字符串序列化和反序列化。
不幸的是,我没有找到任何记录该属性使用的示例。
Json 序列化是否可以,还是应该使用 ValueType 方法?
【问题讨论】:
-
为什么不添加多个声明?
-
我也在寻找添加对复杂类型或字符串数组的支持。有一些怎么实现的?
标签: c# asp.net-mvc-5 wif owin claims-based-identity