ASP.NET对ClaimTypes的要求 - c#

我正在研究在ASP.NET(MVC Core 1.0)中使用基于声明的授权。设置ClaimsIdentity时,我提供了一个键/值字符串对列表,以表示每个Claim。例:

List<Claim> claims = new List<Claim>
{
    new Claim("UserID", user.ID),
    new Claim("Name", user.Name),
    new Claim("Role", "basic")
};

我的理解是,我可以使用任何想要的键/值。但是我注意到通过ClaimsType class有一些预定义的键可用。因此,我可能会使用其中一些预定义的键代替:

List<Claim> claims = new List<Claim>
{
    new Claim(ClaimTypes.Sid, user.ID),
    new Claim(ClaimTypes.Name, user.Name),
    new Claim(ClaimTypes.Role, "basic")
};

问题:

如果我使用预定义的键,关于分配给每个键的实际值是否有任何规则/限制,或者是应用程序定义的?例如,可以将数据库主键粘贴在ClaimTypes.Sid中,还是ASP.NET对ClaimTypes.Sid应该包含哪些内容有特定的期望?
是否有任何必需的ClaimTypes,还是完全由应用程序来决定要包含或不包含的内容?我想答案可能取决于我要与之交互的特定第三方身份验证服务,但是一个不使用任何第三方身份验证的独立ASP.NET项目的简单情况又如何呢? ASP.NET本身有什么要求吗?

任何与使用特定键/值有关的要求和/或最佳实践的链接都将受到赞赏。

参考方案

如果我使用预定义的键,是否有任何规则/限制
关于分配给每个键的实际值,还是应用程序
定义的?例如,可以将数据库主键插入
ClaimTypes.Sid​​,或者ASP.NET对什么有一定的期望
ClaimTypes.Sid​​应该包含?

如果得到的ClaimTypes,则使用预定义的Claim之一还将修改Type属性。 You can find a list of these types here。据我所知,您可以随意将数据库ID放入ClaimTypes.Sid中,但是我强烈建议您使用自己的名称来命名它。

是否有任何要求的ClaimTypes,或者完全由您决定
决定要包含或不包含的应用程序?我想
答案可能取决于特定的第三方身份验证服务
我会与之互动,但简单的情况如何
不使用任何第三方的独立ASP.NET项目
身份验证。 ASP.NET本身有什么要求吗?

假设没有第三方,您可以决定什么是必需的,什么不是必需的。请记住,如果将声明存储在Cookie(不是第三方来源)中,则空间会有所限制; cookies cannot be larger than 4096 bytes in total。

到目前为止,我找到的有关ASP.NET Core声明身份验证的最佳文章是here和here。到发布时,我们仍在RC1中,因此某些详细信息可能会在最终版本发布之前更改。

ASP.NET Core Singleton实例与瞬态实例的性能 - c#

在ASP.NET Core依赖注入中,我只是想知道注册Singleton实例是否会比注册Transient实例更好地提高性能?在我看来,对于Singleton实例,创建新对象和相关对象只需花费一次时间。对于Transient实例,此成本将针对每个服务请求重复。因此Singleton似乎更好。但是,在Singleton上使用Transient时,我们可以获得多…

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

ddl在服务器中未更新-asp.net - javascript

我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……

ASP.NET MVC Core 3.0 API将枚举序列化为字符串 - c#

如何在ASP.NET MVC Core 3.0中将Enum字段序列化为String而不是Int?我不能用旧的方式做。services.AddMvc().AddJsonOptions(opts => { opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter()); }) 我收到…