我在我的 Xamarin 项目中使用 Android Web View 来执行第三方身份验证。登录成功后,我需要提取身份验证 cookie。我将这些 cookie 存储在持久存储中,然后使用它们传递给后续请求。例如:
Android App >(打开)webview > 加载(idp 提供者)url > 用户提供凭据并将 saml 请求发送到我的后端服务器 > 后端服务器验证 saml 并返回身份验证 cookie。
它返回两个 cookie。
现在一切正常。在 webview 的 WebClient 的 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 在浏览器中的显示方式。
请注意,在邮递员和chrome 浏览器中,cookie 都会出现。但在 android webview 中,只有名称为“.AspNetCore.Cookies”的 cookie 根本没有出现。
根据 Java 文档,“当从 cookie 存储中检索 cookie 时,CookieManager 还强制执行 RFC 2965 的第 3.3.4 节中的路径匹配规则。因此,cookie 还必须设置其“路径”属性,以便路径匹配可以在从 cookie 存储中检索 cookie 之前应用规则。 ” 由于我的两个 cookie 具有不同的路径,是路径设置为“/project”的那个没有出现的原因吗?