Как сопоставить MapUniqueJsonKey для Json Тип заявки - PullRequest
0 голосов
/ 17 апреля 2020

Я использую Identity Server 4 и UserProfileService для предоставления пользовательских требований для пользователя.

Существует два сценария ios для покрытия:

  1. Mvc приложение должно получить доступ к UserClaims через промежуточное ПО
  2. Другое приложение не. Net должно получить доступ к UserClaims (например, Postman или React)

Я пробовал два способа, но все еще не смог выполнить оба вышеуказанных требования:

Метод 1 : Использование IdentityServerConstants.ClaimValueTypes.Json

В UserProfileService.cs я добавил следующие утверждения:

var roles= new List<string>
{
    "products.read", "products.write", "products.delete"
};

claims.Add(new Claim("roles", JsonConvert.SerializeObject(roles), IdentityServerConstants.ClaimValueTypes.Json));

Я сгенерировал AccessToken и отправил запрос в UserInfoEndpoint. Я успешно получил следующий результат:

{
    "user_id": "950d44f1-d19e-412b-9fad-e0b59c11b2ec",
    ...
    "roles": [
        "products.read",
        "products.write",
        "products.delete"
    ],
    "sub": "950d44f1-d19e-412b-9fad-e0b59c11b2ec"
}

Затем я добавил это в Mvc application \ Startup.cs

options.ClaimActions.MapUniqueJsonKey("roles", "roles", "json");

Однако в моем приложении Mvc я получил ошибку и не смог десериализовать массив ролей в заявке.

InvalidCastException: Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken.
Newtonsoft.Json.Linq.Extensions.Convert<T, U>(T token)

Метод 2 : без использования IdentityServerConstants.ClaimValueTypes.Json

Если я удалил IdentityServerConstants. ClaimValueTypes. Json) при добавлении типов заявок работает в приложении MVC. Но он отображается как строка в почтальоне вместо объекта Json. Смотри ниже:

{
    "user_id": "950d44f1-d19e-412b-9fad-e0b59c11b2ec",    
    "permissions": "[\"products.read\",\"products.write\",\"products.delete\"]",
    "sub": "950d44f1-d19e-412b-9fad-e0b59c11b2ec"
}

Мне просто интересно, это умышленно или я что-то не так сделал?

Есть ли способ сохранить заявки в формате Json и заставить Mvc сопоставлять заявки для массива строк в заявке?

...