Есть ли причина, по которой идентификационный сервер 4 возвращает ошибку 404 при выходе из системы на рабочем месте? - PullRequest
0 голосов
/ 18 января 2019

В настоящее время у меня возникла проблема в производственной среде с моей реализацией сервера удостоверений 4.

Когда я выполняю вход в систему, меня перенаправляют на сервер идентификации, и я могу проходить аутентификацию без проблем.

Моя проблема возникает, когда я пытаюсь выйти из системы. Я перенаправлен на сервер идентификации на конечной точке «connect / endsession», и возвращается 404.

Я даже пробовал со всеми браузерами, все та же проблема. производство: MS server 2012, iis 8 и .net core 2.1

Вот несколько примеров кода:

При запуске моего клиента:

services.AddAuthentication(option => {
            option.DefaultScheme = "Cookies";
            option.DefaultChallengeScheme = "oidc";


        }).AddCookie("Cookies")
        .AddOpenIdConnect("oidc", options => {
            options.SignInScheme = "Cookies";
            options.Authority = Configuration["Authentication:Authority"]; // identity.example.com
            options.RequireHttpsMetadata = false;
            options.ClientId = Configuration["Authentication:ClientId"]; //example.mvc
            options.SaveTokens = true;
            options.GetClaimsFromUserInfoEndpoint = true;
            options.ClientSecret = Configuration["Authentication:ClientSecret"] //!@examplepassword@! ;

        });

в контроллере учетной записи у меня есть этот метод выхода из системы

 public async Task Logout()
    {

        await HttpContext.SignOutAsync("Cookies");
        await HttpContext.SignOutAsync("oidc");


    }

На сервере идентификации

Моя реализация магазина клиента извлекает объект клиента из файла json и правильно отображает его, я знаю, что этот бит работает.

{
  "Enable": true,
  "ClientId": "example.mvc",
  "ClientName": "example enterprise ",
  "RedirectUris": [ "http://www.example.com/signin-oidc" ],
  "PostLogoutRedirectUris": [ "http://www.example.com/signout-callback-oidc" ],
  "AllowAccessTokensViaBrowser": true,
  "RequireConsent": false,
  "ClientSecret": "!@examplepassword@!",
  "AllowedScopes": [ "openid", "profile", "email" ],
  "GrantType": "implicitandclientcredentials"
} 

Когда вы нажимаете на кнопку «Выйти», я ожидаю, что вы выйдете из системы навсегда. Но по какой-то причине я получаю ошибку 404.

Не уверен, должен ли я добавить контроллер, который имеет [Route ("/ signout-callback-oidc")], но по какой-то причине я просто не могу заставить выход из системы работать в производстве.

достаточно забавно, он работает локально на моем компьютере, я пытаюсь отладить его.

1 Ответ

0 голосов
/ 19 января 2019

Таким образом, в iis оказывается ограничение максимальной длины URL, которое при попадании возвращает 404. Я изменил метод .AddOpenIdConnect в файле startup.cs и добавил в одну строку.

.AddOpenIdConnect("oidc", options => {
            options.SignInScheme = "Cookies";
            options.Authority = Configuration["Authentication:Authority"];
            options.RequireHttpsMetadata = false;
            options.ClientId = Configuration["Authentication:ClientId"];
            options.SaveTokens = true;
            options.GetClaimsFromUserInfoEndpoint = true;
            options.ClientSecret = Configuration["Authentication:ClientSecret"];
            options.AuthenticationMethod = OpenIdConnectRedirectBehavior.FormPost; // adding this line fixed my problem. and i can now logout permanently. 

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