Как использовать IdentityServer4 Access Token и атрибут [Authorize] - PullRequest
0 голосов
/ 27 августа 2018

У меня есть решение с проектами: IdentityServer4 , ApiServer , MvcClient . Я использую Hybrid flow. Auth работает очень хорошо, но я не могу получить role в MvcClient.

В приложении MvсСlient после авторизации я получаю access_token. Маркер содержит необходимые претензии. Но приложение MVC не может получить доступ к роли пользователя.

То есть предполагается, что я буду вызывать внешний API из приложения MVC. Но мне также нужно, чтобы приложение MVC могло использовать роль пользователя.

Атрибут [Авторизовать] работает нормально, но [Авторизовать (Roles =) "admin")] не работает!

Исходный код здесь: gitlab

1 Ответ

0 голосов
/ 27 августа 2018

К сожалению, я не нашел лучшего решения, чем перехват события Access Token. Затем я проанализировал его и вручную добавил претензии к cookie.

                options.Events = new OpenIdConnectEvents
                {
                    OnTokenResponseReceived = xxx =>
                    {
                        JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
                        JwtSecurityToken jwt = handler.ReadJwtToken(xxx.TokenEndpointResponse.AccessToken);

                        var claimsIdentity = (ClaimsIdentity) xxx.Principal.Identity;
                        claimsIdentity.AddClaims(jwt.Claims);
                        return Task.FromResult(0);
                    }
                };

Я буду вам очень благодарен! Если вы посмотрите на исходный код проекта (он был обновлен до версии 2.1 ядра asp.net) и предложите лучший вариант!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...