Я предполагаю, что вы используете некоторые клиенты .NET Framework, потому что все эти проблемы обычно связаны с промежуточным программным обеспечением Microsoft.Owin
, которое имеет некоторое шифрование, которое приводит к тому, что файл cookie становится таким большим.
Решение для вас снова является частью этого промежуточного программного обеспечения.Все ваши клиенты (использующие Identity Server в качестве авторизатора) должны иметь пользовательскую IAuthenticationSessionStore
имплементацию.
Это интерфейс, часть Microsoft.Owin.Security.Cookies
.
Вам необходимо реализовать егов зависимости от того, какое хранилище вы хотите использовать для него, но в основном оно имеет следующую структуру:
public interface IAuthenticationSessionStore
{
Task RemoveAsync(string key);
Task RenewAsync(string key, AuthenticationTicket ticket);
Task<AuthenticationTicket> RetrieveAsync(string key);
Task<string> StoreAsync(AuthenticationTicket ticket);
}
В итоге мы создали хранилище SQL Server для файлов cookie.Вот некоторый пример для Реализация Redis , а вот еще один с EF DbContext , но не чувствуйте себя вынужденным использовать любой из них.
Допустим, чтовы реализуете MyAuthenticationSessionStore : IAuthenticationSessionStore
со всеми необходимыми ему значениями.
Затем в вашем Owin Startup.cs
при вызове:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
SessionStore = new MyAuthenticationSessionStore()
CookieName = cookieName
});
Таким образом, как документация для свойства IAuthenticationSessionStore SessionStore
говорит:
// Необязательный контейнер для хранения идентификатора между запросами.При использовании // клиенту отправляется только идентификатор сеанса.Это может быть использовано для уменьшения // потенциальных проблем с очень большими идентификаторами.
В вашем заголовке у вас будет только идентификатор сеанса, а сам идентификатор будет считан из реализованного вами хранилища.