0

Я новичок в этом. Может кто-то, пожалуйста, помогите мне, так как я схожу с ума по поводу своей проблемы уже почти месяц :( Вкратце: у меня есть проект сервера идентификации, проект webapi и угловой клиент. Запрос клиента для аутентификации и получения id_token и access_token (все), access_token отправить WebAPI проект, где у меня есть:Аутентификация пользователя для IdentityServer на стороне WebApi

var idServerBearerTokenAuthOptions = new IdentityServerBearerTokenAuthenticationOptions { 
      Authority = "https://localhost:11066/IdentityServer/identity", 
      ValidationMode = ValidationMode.ValidationEndpoint, 
      AuthenticationType = "Bearer", 
      RequiredScopes = new[] { "permissions", "openid" }, 
      DelayLoadMetadata = true 
     }; 
app.UseIdentityServerBearerTokenAuthentication(idServerBearerTokenAuthOptions); 

и я Autofac, который должен получить мне текущего пользователя logedin

builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).InstancePerRequest(); 
builder.Register(c => new ClaimsIdentityApiUser((ClaimsIdentity)Thread.CurrentPrincipal.Identity)).As<IApiUser>().InstancePerRequest(); 

НО Thread.CurrentPrincipal.Identity не имеет ничего, и также ClaimsPrincipal .Current.Identity ничего не имеет. Что мне не хватает?

p.s. Аналогичная проблема с этим вопросом Protecting webapi with IdentityServer and Autofac - can't get claims, но, очевидно, не такое же решение и не настроено.

+0

Вы пробовали искать HttpContext.User вместо пользователя потока? –

+0

Спасибо за ответ Трэвис. Я считаю, что это также предназначено для использования на контроллерах (например, RequestContext), но я хочу идентифицировать пользователя в конвейере owin. Или я ошибаюсь? (в этом случае, пожалуйста, дайте мне короткий пример) – theCuriousOne

+0

Это может быть очевидно, но вы добавили атрибут authorize? Без него нет ничего, чтобы заставить аутентификацию, и идентификатор будет пустым –

ответ

0

а) пользователь должен всегда быть извлечено из ApiController.User (или RequestContext) б) маркер проверки может потерпеть неудачу по какой-либо причине использовать этот ресурс, чтобы включить ведение журнала для маркеров промежуточного проверки:

https://identityserver.github.io/Documentation/docsv2/consuming/diagnostics.html

c) Используете ли вы JWT или ссылочные маркеры? Для JWT вы можете установить ValidationMode на локальный

+0

Спасибо Dominick за ответ, но .. a) Я хочу получить пользователя очень рано в конвейере owin (после app.UseIdentityServerBearerTokenAuthentication (idServerBearerTokenAuthOptions);) или это невозможно (у меня плохой дизайн)? b) Попробовал добавить это предложение в web.config, но не журнал. Где должен записываться файл? c) да, это токен JWT. Пробовал с ValidationMode локальным, все тот же результат, но он зависит от – theCuriousOne

+0

p.s. b) Я вручную создал ** katana.trace.log ** в корне проекта и в корне решения, но ничего не регистрировалось – theCuriousOne

+0

В конвейере Katana вы получаете доступ к текущему использованию через OwinContext.Authentication.User. Для ведения журнала - это просто стандартное ведение журнала .NET - вы должны иметь возможность получить это для работы – leastprivilege