Я новичок в этом. Может кто-то, пожалуйста, помогите мне, так как я схожу с ума по поводу своей проблемы уже почти месяц :( Вкратце: у меня есть проект сервера идентификации, проект 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, но, очевидно, не такое же решение и не настроено.
Вы пробовали искать HttpContext.User вместо пользователя потока? –
Спасибо за ответ Трэвис. Я считаю, что это также предназначено для использования на контроллерах (например, RequestContext), но я хочу идентифицировать пользователя в конвейере owin. Или я ошибаюсь? (в этом случае, пожалуйста, дайте мне короткий пример) – theCuriousOne
Это может быть очевидно, но вы добавили атрибут authorize? Без него нет ничего, чтобы заставить аутентификацию, и идентификатор будет пустым –