IdentityServer4 и .netcore WebApp / WebAPI cookie аутентификация / авторизация - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть три приложения, а именно (IdentityServer4 App, .Net Core2.0 WebApp, .NetCore2.0 WebAPI)

Когда я открываю веб-приложение, если оно не аутентифицировано, оно переходит на сервер идентификации, где я предоставляю учетные данные. После успешной аутентификации он возвращается в веб-приложение с необходимыми файлами cookie. Пока все хорошо.

Теперь в веб-приложении я звоню в веб-приложение (файлы cookie устанавливаются сервером идентификации в веб-приложении), но каждый раз он возвращается как 401-й неавторизованный.

Пример кода в веб-приложении:

services.AddAuthentication(options =>
   {
      options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
      options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
  })
  .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o =>
        {
            o.Cookie.Name = Config.CookieName;
            o.Cookie.SameSite = SameSiteMode.None;
        })
  .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
        {
            options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;

            options.Authority = Config.IdentityUrl;
            options.RequireHttpsMetadata = false;
            options.ClientId = Config.ClientId;
            options.SaveTokens = true;
        });

И пример кода, используемый в WebAPI в методе настройки сервиса ConfigureServices:

services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o => {
    o.Cookie.Name = Config.CookieName;
    o.Cookie.SameSite = SameSiteMode.None;
    o.Events = new CookieAuthenticationEvents()
    {
        OnRedirectToLogin = redirectContext =>
        {
            redirectContext.HttpContext.Response.StatusCode = StatusCodes.Status401Unauthorized;
            return Task.CompletedTask;
        }
    };
})
.AddIdentityServerAuthentication(options =>
{
    options.Authority = Config.IdentityUrl;
    options.RequireHttpsMetadata = false;
    options.ApiName = Config.ApiName;
});

также у меня есть app.UseAuthentication() метод в Configure метод

То, что я чувствую, связано с чем-то с идентификатором сессии. Если это так, то, пожалуйста, помогите, если нет, то, что вы могли бы разглядеть как не правильно, пожалуйста, помогите.

Я проследил журнал, который показывает только следующее:

Cookie не был аутентифицирован. Сообщение об ошибке: сбой снятия защиты с билета.

Файл cookie для аутентификации был отправлен.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 10 ноября 2018

Вот волшебная строка кода. Добавлено в

ConfigureServices

метод до

services.AddAuthentication

Это было причиной, из-за которой cookie не проверялось.

services.AddDataProtection (). PersistKeysToFileSystem (PersistKeysLocation.GetKeyRingDirInfo ()) .SetApplicationName (Config.ApplicationName);

...