Android CookieManager Xamarin не хранит все куки - PullRequest
0 голосов
/ 26 сентября 2018

Я использую Android Web View в своем проекте Xamarin для выполнения сторонней аутентификации.После успешного входа в систему мне нужно извлечь куки аутентификации.Эти куки я храню в постоянном хранилище, а затем использую их для передачи последующим запросам.Например:

Android-приложение> (открывает) веб-просмотр> Загрузка (URL-адрес провайдера) URL-адрес> Пользователь предоставляет учетные данные, и запрос saml отправляется на мой бэкэнд-сервер> Бэкэнд-сервер проверяет saml и возвращает файлы cookie аутентификации.

Возвращает два куки.

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

public override void OnPageFinished(WebView view, string url)
    {
        base.OnPageFinished(view, url);
        var handler = OnPageCompleted;
        var uri = new Uri(url);
        AllowCookies(view);
        var cookies = CookieManager.Instance.GetCookie(url);
        var onPageCompletedEventArgs = new OnPageCompletedEventArgs { Cookies = cookies, Url = uri.AbsolutePath, RelativeUrl = uri.PathAndQuery, Host = uri.Host };
        handler?.Invoke(this, onPageCompletedEventArgs);
    }
private void AllowCookies(WebView view)
    {
        CookieManager.Instance.Flush();
        CookieManager.AllowFileSchemeCookies();
        CookieManager.SetAcceptFileSchemeCookies(true);
        CookieManager.Instance.AcceptCookie();
        CookieManager.Instance.AcceptThirdPartyCookies(view);
        CookieManager.Instance.SetAcceptCookie(true);
        CookieManager.Instance.SetAcceptThirdPartyCookies(view, true);
    }

Проблема в том, что я могу получить только один файл cookie (wc_cookie_ps_ck), я не могу увидетьдругой файл cookie аутентификации (.AspNetCore.Cookies).Вот как файлы cookie отображаются в браузере.

enter image description here

Обратите внимание, что в почтальоне и в браузере Chrome оба куки появляются.Но в веб-браузере Android только cookie с именем «.AspNetCore.Cookies» вообще не отображаются.

Согласно документу Java, « При извлечении файлов cookie из хранилища cookie CookieManager также применяетПравило сопоставления пути из раздела 3.3.4 RFC 2965. Таким образом, у cookie-файла также должен быть установлен атрибут «путь», чтобы можно было применить правило сопоставления пути до того, как cookie-файл будет извлечен из хранилища cookie. "Поскольку оба моих файла cookie имеют разные пути, это причина, по которой не отображается файл с путем" / project "?

1 Ответ

0 голосов
/ 12 октября 2018

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

var cookies = CookieManager.Instance.GetCookie(url);

не возвращает cookie, в котором установлена ​​та же переменная сайта.Это похоже на ошибку от Xamarin Android.Я уже поднимал проблему в Xamarin Android github.

В проблеме xamarin android github я упомянул шаги для воспроизведения.Для меня, обходной путь для решения этой проблемы состоял в том, чтобы отключить одну и ту же переменную cookie в моем базовом серверном проекте asp.net.Для этого:

Чтобы настроить cookie-файл приложения при использовании Identity, вы можете использовать метод ConfigureApplicationCookie внутри ConfigureServices вашего запуска:

// add identity
services.AddIdentity<ApplicationUser, IdentityRole>();

// configure the application cookie
services.ConfigureApplicationCookie(options =>
{
    options.Cookie.SameSite = SameSiteMode.None;
});

Ссылка для упомянутого выше решения. Здесь .

...