Как выйти из системы с помощью конечной точки сеанса IdentityServer4? - PullRequest
1 голос
/ 23 мая 2019

Я пытался выйти из сеанса, используя GET запрос из документов IdentityServer4. HttpResponseMessage выглядит так:

HttpResponseMessage res = await client.GetAsync($"connect/endsession?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}");

Сначала у меня проблема с длиной Ури. Когда я отправляю запрос, метод catch исключение

Invalid URI: The Uri scheme is too long. 

Чтобы исправить эту проблему, я попытался отправить параметры в строку следующим образом:

var parameters = $"?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}";
HttpResponseMessage res = await client.GetAsync("connect/endsession" + parameters );

Также добавьте MaxRequestLineSize в Program.cs, например:

UseKestrel(options =>
{
  options.Limits.MaxRequestLineSize = 20480;
})

Также пробовал так: https://stackoverflow.com/a/32457474/9541386 Но у меня ничего не работает.

Я пытался отправить этот запрос почтальоном. Запрос отправлен

http://localhost:5000/connect/endsession?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}

но в методе FindClientByIdAsync из интерфейса IClientStore параметр clientId выглядит следующим образом: enter image description here

Но в обычном случае есть Id . Я не вижу, что происходит до этого, потому что это первая точка входа. Как я могу исправить проблему с длиной Uri и неправильным параметром?

1 Ответ

3 голосов
/ 23 мая 2019

Скорее всего, проблема в неверном символе в параметрах запроса:

?id_token_hint={idTokenHint}&post_logout_redirect_uri={postLogoutRedirectUri}

В этом случае я подозреваю строку postLogoutRedirectUri, которая содержит символ :, который недопустим, если не экранирован: %3A.

Кодировать URI:

var encodedUri = System.Web.HttpUtility.UrlEncode(postLogoutRedirectUri);

И использовать это как параметр:

?id_token_hint={idTokenHint}&post_logout_redirect_uri={encodedUri}

Хотя это может решить проблему, почему бы вам не использовать предоставленные методы для выхода из системы ? E.g.:

//using Microsoft.AspNetCore.Authentication;
//using Microsoft.AspNetCore.Mvc;

// Remove cookie
await HttpContext.SignOutAsync("Cookies");
// Signout oidc
await HttpContext.SignOutAsync("oidc");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...