使用 AddClaims 将 int 数组存储到声明中
Store array of int into claims with AddClaims
我想在我对 Web 应用程序 .net core 2.2 的声明之一中放入一个 int 数组。
登录创建工单时我用这个来添加声明,但是如何添加一个复杂的对象。
if (ticket.HasScope(OpenIdConnectConstants.Scopes.Profile))
{
if (!string.IsNullOrWhiteSpace(user.FirstName))
identity.AddClaim(CustomClaimTypes.FirstName, user.FirstName, OpenIdConnectConstants.Destinations.IdentityToken);
if (!string.IsNullOrWhiteSpace(user.LastName))
identity.AddClaim(CustomClaimTypes.LastName, user.LastName, OpenIdConnectConstants.Destinations.IdentityToken);
if (user.Functions.Any())
// not possible : Functions = List<int>
identity.AddClaim(CustomClaimTypes.Functions, user.Functions, OpenIdConnectConstants.Destinations.IdentityToken);
}
使用 AddClaims,只能添加字符串
您可以重复添加相同的声明类型,例如:
foreach(var f in user.Functions)
identity.AddClaim(CustomClaimTypes.Functions, f.ToString(), OpenIdConnectConstants.Destinations.IdentityToken);
作为替代方案,您可以加入整数并在访问声明后拆分它们:
if (user.Functions.Any())
{
var joinedFunctions = string.Join(";", user.Functions);
identity.AddClaim(CustomClaimTypes.Functions, joinedFunctions, OpenIdConnectConstants.Destinations.IdentityToken);
}
要检索值,您可以在之后拆分它们:
functionsClaimValue.split(';');
您需要确保您选择的分隔符(在此示例中为分号)不能作为常规字符包含在值中。
您可以将复杂对象序列化为 json,并将其添加到声明中。大致如下:
identity.AddClaim(ClaimName, JsonConvert.SerializaObject(intArray));
然后在读取时将其反序列化:
int[] intArray = JsonConvert.DeserializeObject<int[]>(claim.Value);
我想在我对 Web 应用程序 .net core 2.2 的声明之一中放入一个 int 数组。
登录创建工单时我用这个来添加声明,但是如何添加一个复杂的对象。
if (ticket.HasScope(OpenIdConnectConstants.Scopes.Profile))
{
if (!string.IsNullOrWhiteSpace(user.FirstName))
identity.AddClaim(CustomClaimTypes.FirstName, user.FirstName, OpenIdConnectConstants.Destinations.IdentityToken);
if (!string.IsNullOrWhiteSpace(user.LastName))
identity.AddClaim(CustomClaimTypes.LastName, user.LastName, OpenIdConnectConstants.Destinations.IdentityToken);
if (user.Functions.Any())
// not possible : Functions = List<int>
identity.AddClaim(CustomClaimTypes.Functions, user.Functions, OpenIdConnectConstants.Destinations.IdentityToken);
}
使用 AddClaims,只能添加字符串
您可以重复添加相同的声明类型,例如:
foreach(var f in user.Functions)
identity.AddClaim(CustomClaimTypes.Functions, f.ToString(), OpenIdConnectConstants.Destinations.IdentityToken);
作为替代方案,您可以加入整数并在访问声明后拆分它们:
if (user.Functions.Any())
{
var joinedFunctions = string.Join(";", user.Functions);
identity.AddClaim(CustomClaimTypes.Functions, joinedFunctions, OpenIdConnectConstants.Destinations.IdentityToken);
}
要检索值,您可以在之后拆分它们:
functionsClaimValue.split(';');
您需要确保您选择的分隔符(在此示例中为分号)不能作为常规字符包含在值中。
您可以将复杂对象序列化为 json,并将其添加到声明中。大致如下:
identity.AddClaim(ClaimName, JsonConvert.SerializaObject(intArray));
然后在读取时将其反序列化:
int[] intArray = JsonConvert.DeserializeObject<int[]>(claim.Value);