получение токена доступа из http-контекста - PullRequest
0 голосов
/ 03 июля 2018

Я использую IdentityServer4 для аутентификации своих приложений и веб-приложений. В моем клиентском приложении (vuejs) реализован неявный тип предоставления.

В моем WEB API есть такая настройка:

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
             .AddIdentityServerAuthentication(options => {
                 options.Authority = Configuration.GetSection("AppSettings:BaseUrls:Identity").Value;
                 options.RequireHttpsMetadata = false;
                 options.SaveToken = true;
                 options.ApiName = "myapi";
             });

В моем контроллере я использую:

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

чтобы получить мой токен. Это работало до прошлой недели, пока я не обновил свое ядро ​​до версии 2.1.

После обновления возвращается ноль.

Старая версия:

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.7" />

Новая версия:

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.1" />

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете добавить следующее в ваш AddIdentityServerAuthentication раздел

options.JwtBearerEvents = new JwtBearerEvents() { OnTokenValidated = async context => { var accessToken = context.SecurityToken as JwtSecurityToken; if (accessToken != null) { ClaimsIdentity identity = context.Principal.Identity as ClaimsIdentity; if (identity != null) { identity.AddClaim(new Claim("access_token", accessToken.RawData)); } } } }

Затем вы можете получить доступ к токену, используя Request.HttpContext.User.FindFirst("access_token").Value

...