Внешняя аутентификация Asp.net Core 2.0 не сохраняется - PullRequest
0 голосов
/ 29 мая 2018

Я использую asp.net Core 2.0 с различными внешними аутентификациями (Google, Twitter и т. Д.).

Все работает, и я получаю подтвержденный ответ с событием OnTicketReceived, однако все последующие вызовыНа сайте не сохраняются данные пользователя.

Вот мой стартап:

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentity<IdentityUser, IdentityRole>()
        .AddDefaultTokenProviders();
    services.AddAuthentication()
        .AddGoogle(googleOptions =>
        {
            googleOptions.ClientId = Configuration["Google:ClientId"];
            googleOptions.ClientSecret = Configuration["Google:ClientSecret"];
            googleOptions.CallbackPath = "/auth/google";
            googleOptions.SaveTokens = true;
            googleOptions.Events = new OAuthEvents {OnTicketReceived = async e => await HandleOnTicketReceived(authService, e),};
        })
        .AddTwitter(twitterOptions =>
        {
            twitterOptions.ConsumerKey = Configuration["Twitter:ClientId"];
            twitterOptions.ConsumerSecret = Configuration["Twitter:ClientSecret"];
            twitterOptions.CallbackPath = "/auth/twitter";
            twitterOptions.RetrieveUserDetails = true;
            twitterOptions.SaveTokens = true;
            twitterOptions.Events = new TwitterEvents {OnTicketReceived = async e => await HandleOnTicketReceived(authService, e),};
        });

    services.AddMvc();
}

Это все вроде бы отлично работает.Я получаю все необходимые данные от каждого провайдера OAuth.Вот пример: properties

private async Task HandleOnTicketReceived(IAuthService authService, TicketReceivedContext e)
{
    var identity = e.Principal.Identity as ClaimsIdentity;
    // HERE identity is correct for all external auth providers, so it is working this far
}

Проблема в том, что каждый последующий звонок на сайт теряет внешнюю личность пользователя.То, что было там, теперь исчезло.

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var identity = User.Identity as ClaimsIdentity;

    // HERE is the problem -- on all subsequent calls, identity is basically empty

    base.OnActionExecuting(filterContext);
}

Как мне сохранить личность пользователя при вызовах?Файл cookie "Identity.External" установлен и выглядит правильно.

Редактировать:

Я также добавил SQL-сервер с

services.AddDbContext<ApplicationDbContext>();

и

services.AddIdentity<IdentityUser, IdentityRole>()
         .AddEntityFrameworkStores<ApplicationDbContext>()

Пользовательские таблицы AspNet создаются, но никогда не заполняются.Я в растерянности за то, что здесь не хватает.

Я должен уточнить, что я использую dbContext.Database.Migrate () для создания таблиц аутентификации, поэтому я уверен, что ApplicationDbContext работает.Однако ошибки не выдаются, таблицы просто не заполняются, а последующие вызовы просто не получают идентификационные данные пользователя.

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