Не удается заставить аутентификацию работать на .NET Core 2.2 и Identity Server 4 - PullRequest
0 голосов
/ 07 января 2019

Этот вопрос будет задан через два дня, но перед этим мне нужна помощь.

Я запускаю два проекта в одном решении. Один из них - мой ID-провайдер (я использую IDS4), а другой - простой клиент MVC (с двумя методами на контроллере - Home / Open и Home / Secured . последний украшен атрибутом Авторизироваться .

Когда я пытаюсь получить доступ к открытому, он ведет себя как положено. Защищенный, однако, выбрасывает 401 на меня , но не возвращается на страницу входа. Я вполне уверен, что упустил что-то важное в настройке клиента или сервера.

На стороне поставщика ID У меня есть следующее.

public void ConfigureServices(IServiceCollection services)
{
  services.AddIdentity<IdentityUser, IdentityRole>()
    .AddDefaultTokenProviders();

  services.AddIdentityServer()
    .AddDeveloperSigningCredential()
    .AddInMemoryPersistedGrants()
    .AddInMemoryApiResources(ApiResources)
    .AddInMemoryClients(Clients)
    .AddTestUsers(Users)
    .AddInMemoryIdentityResources(IdentityResources);

  services.AddAuthentication()
    .AddJwtBearer(_ =>
    {
      _.Authority = "https://localhost:5000";
      _.Audience = "http://localhost:5001";
    });
}

public IEnumerable<Client> Clients => new[]
{
  new Client
  {
    ClientId = "MvcClient",
    ClientName = "MVC Client",

    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
    AllowOfflineAccess = true,
    RequireConsent = false,
    ClientSecrets = { new Secret("MvcSecret".Sha256(), DateTime.Now.AddMinutes(2)) },

    RedirectUris = { "http://localhost:5000/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:5002/" },

    AllowedScopes =
    {
      IdentityServerConstants.StandardScopes.OpenId,
      IdentityServerConstants.StandardScopes.Profile,
      IdentityServerConstants.StandardScopes.Email,
    }
  }
};

Я подтвердил, что при вводе вручную http://localhost:5000/signin-oidc/, я вижу документ index.html , расположенный там. Я ожидал, что когда я попытаюсь получить доступ к защищенной странице, я попаду туда. Вместо этого я получаю только 401.

На стороне клиента MVC У меня есть следующее.

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc();

  JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

  services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(_ =>
    {
      _.Authority = "http://localhost:5000";
      _.Audience = "http://localhost:5002";
      _.SaveToken = true;
      _.RequireHttpsMetadata = false;
      _.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true };
    })
    .AddOpenIdConnect(_ => { _.ClientId = "mvc_client"; });
}

Мне нужно выяснить, почему он не отправляет меня на страницу входа, как указано. Мне также нужно придумать способ входа в систему и аутентификации с использованием JWT под MVC. Я благодарен, если я хотя бы получу предложение о том, как его устранить, и / или сравнить с правильным поведением. И рабочий пример был бы неплохо иметь.

Я исследовал это в течение нескольких дней, и мое мнение таково, что официальное руководство неясно, начинает устаревать и, что является наиболее запутанной частью, прыгает между темами без красной нити. Все примеры и блоги, которые я видел (и я видел много), не будут работать на моей машине или окажутся недействительными для последней версии .NET Core (которая на данный момент является 2.2). ближайший на самом деле не работал, и я подозреваю, что нет смысла тратить время на его устранение.

...