Заполните поле «Контроллер» из утверждений пользователя

Как заполнить поле контроллера из утверждений пользователя? Мы используем аутентификацию на основе утверждений, и меня интересует одно из значений утверждений, например «Внутренний идентификатор», которое отправляется вместе с утверждениями пользователя.

Мне нужно будет извлечь это значение утверждения и сделать его доступным для всех моих веб-API. Я знаю, что могу извлечь значение из утверждений пользователя, используя цикл внутри каждого из методов действия.

Есть ли лучший способ сделать это? Что-то вроде поставщика атрибутов/значений


person shenoydev    schedule 02.02.2016    source источник


Ответы (2)


вы можете использовать метод расширения IIdentity для извлечения утверждений, вот как я это делаю:

    public static int GetInternalId(this IIdentity identity)
    {
        var storedClaim = ((ClaimsIdentity)identity).FindFirstValue("InternalId");

        if (string.IsNullOrEmpty(storedClaim)) return 0;

        var value = Convert.ToInt32(storedClaim);
        return value;
    }

и вы можете вызывать его везде, где у вас есть доступ к объекту Context, например к контроллеру или ApiController.

User.Identity.GetInternalId();
person RayatPisheh    schedule 25.09.2016

Вы можете создать настраиваемый поставщик значений, который считывает утверждения из текущего удостоверения пользователя, а затем имеет класс, представляющий список пары ключ/значение, которая является утверждением/значением в вашем методе действия.

Это приведет к тому, что поставщик значений заполнит пару ключ/значение, и вам не придется писать дополнительный код, чтобы пользователь утверждал в любом методе действия.

person Haitham Shaddad    schedule 25.09.2016