I'm investigating using claims-based authorization in ASP.NET (MVC Core 1.0). When setting up a ClaimsIdentity
, I supply a list of key/value string pairs to represent each Claim
. Example:
List<Claim> claims = new List<Claim>
{
new Claim("UserID", user.ID),
new Claim("Name", user.Name),
new Claim("Role", "basic")
};
My understanding is that I can use whatever keys/values I want. But I noticed there are some pre-defined keys available via the ClaimsType
class. So, I could potentially use some of these pre-defined keys instead:
List<Claim> claims = new List<Claim>
{
new Claim(ClaimTypes.Sid, user.ID),
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Role, "basic")
};
Questions:
If I use the pre-defined keys, are there any rules/restrictions regarding the actual values assigned to each key, or is it application defined? For example, is it OK to stick a database primary key in
ClaimTypes.Sid
, or does ASP.NET have certain expectations of whatClaimTypes.Sid
should contain?Are there any
ClaimTypes
that are required, or is it completely up to the application to decide what to include or not include? I imagine the answer may depend on specific third-party authentication services I would interact with, but how about the simple case of a self-contained ASP.NET project that does not use any third-party authentication. Does ASP.NET itself have any requirements?
Any links to requirements and/or best practices regarding usage of specific key/values would be appreciated.