Сервер идентификации 4: получите токе доступа на веб-форме asp. net. NET 4.5 - PullRequest
0 голосов
/ 14 июля 2020

Я использую Identity serve4 для аутентификации и авторизации пользователей, и одним из моих клиентов является веб-форма asp. net, написанная на. NET 4.5. Когда пользователь пытался получить доступ к защищенной веб-форме, я перенаправляю пользователя на сервер идентификации для аутентификации. Но после аутентификации есть logi c, который основан на текущем зарегистрированном идентификаторе пользователя, и для получения информации для входа текущего пользователя мне нужно вызвать некоторую конечную точку токена, для которой требуется токен? Я проверил веб-форму после входа в систему и заметил, что есть некоторые файлы cookie аутентификации. Теперь мой вопрос: как мне получить токен из этого? В ядре asp. net мы получаем токен доступа, используя метод httpcontext ниже, но как мы можем получить то же самое в веб-форме asp. net, используя. NET 4.5?

var access_token = await HttpContext.GetTokenAsync("access_token")

1 Ответ

1 голос
/ 14 июля 2020

Самый простой способ - сохранить токен доступа в ie повара после аутентификации. Измените код на клиенте следующим образом:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                
                ResponseType = "id_token token",
                Scope = "openid profile api1",
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    SecurityTokenValidated = n =>
                    {
                        n.AuthenticationTicket.Identity.AddClaim(new Claim("access_token", n.ProtocolMessage.AccessToken));
                        return Task.FromResult(0);
                    },
                }
            });

И затем вы можете получить access_token из требований текущего пользователя, например:

var accessToken = user.FindFirst("access_token").Value;

Подробности я объяснил здесь: https://nahidfa.com/posts/identityserver4-and-asp-.net-mvc/#call -an-authorized-api-endpoint-using-access-token

Изменить:

Чтобы установить Identity.Name, добавьте этот код:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                ...
                TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
                {
                    NameClaimType = "name"
                }, // This is to set Identity.Name                 
            });
...