Хранить массив int в претензиях с помощью AddClaims - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу поместить массив int в одну из моих претензий в веб-приложение .net core 2.2.

При входе в систему для создания заявки я использую ее для добавления заявок, но как добавитьсложный объект.

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 можно добавлять только строки

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы можете сериализовать сложный объект в json и добавить его в заявку.Что-то вроде:

identity.AddClaim(ClaimName, JsonConvert.SerializaObject(intArray));

А затем при прочтении просто десериализуйте это обратно:

int[] intArray = JsonConvert.DeserializeObject<int[]>(claim.Value);
0 голосов
/ 13 февраля 2019

Вы можете добавлять один и тот же тип заявки несколько раз, например:

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(';');

Необходимо убедиться, что выбранный разделитель (в данном примере точка с запятой) не может содержаться в качестве обычного символа в значениях.

...