【问题标题】:Secure pdf files and Xamarin Forms保护 pdf 文件和 Xamarin 表单
【发布时间】:2017-08-24 22:05:42
【问题描述】:

我有一个需要身份验证的表单应用程序。我的页面之一是 webview,我使用 cookie 通过 webview 将身份验证状态发送到服务器。网页上有一个 .pdf 文件的链接,该文件也需要身份验证。当这个链接被点击时,我抓取 url 并尝试使用 Device.OpenUri 打开它,但身份验证失败。有没有办法将身份验证 cookie 连同 URL 一起发送到 OpenUri,或者有另一种方法让设备的浏览器知道用户已经过身份验证?或者有没有其他方法可以在webview中下载pdf文件?

【问题讨论】:

    标签: pdf webview xamarin.forms


    【解决方案1】:

    因为Device.OpenUri,只会打开另一个带有该url的应用程序,无法通过身份验证。您需要做的是将 PDF 下载到本地存储,然后从本地存储打开 PDF。您需要将文件放在移动设备上的共享存储中,以允许其他应用程序访问它。

    如果这存在安全风险,您需要将内部 PDF 查看器添加到您的应用中,以便您可以在内部查看应用中的 PDF。

    现在,如果你想下载 PDF,你需要使用 HttpClient。在 iOS 和 UWP 中,HttpClient 和 WebView 共享同一个 cookie 容器,这意味着如果您在 WebView 上进行了身份验证,那么它已经在 HttpClient 中进行了身份验证。对于 Android,您需要复制身份验证 cookie。

    首先建立一个你可以读取的cookie容器。

    CookieContainer _cookieContainer = new CookieContainer();
    System.Net.Http.HttpClient _client = new System.Net.Http.HttpClient(new HttpClientHandler() { CookieContainer = _cookieContainer });
    

    然后根据你想要复制的方式,你可以这样做

    private void CopyCookies(HttpResponseMessage result, Uri uri)
    {
        foreach (var header in result.Headers)
            if (header.Key.ToLower() == "set-cookie")
                foreach (var value in header.Value)
                     _cookieManager.SetCookie($"{uri.Scheme}://{uri.Host}", value);
    
        foreach (var cookie in GetAllCookies(_cookieContainer))
            _cookieManager.SetCookie(cookie.Domain, cookie.ToString());
    }
    

    public void ReverseCopyCookies(Uri uri)
    {
        var cookie = _cookieManager.GetCookie($"{uri.Scheme}://{uri.Host}");
    
        if (!string.IsNullOrEmpty(cookie))
            _cookieContainer.SetCookies(new Uri($"{uri.Scheme}://{uri.Host}"), cookie);
    }
    

    我会在Cookie Sharing with WebView and the Http Client 中详细介绍。

    【讨论】:

    • 谢谢。我已经在 webview 和 HttpClient 之间共享了 cookie,我找到了一些下载和打开文件的示例。
    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2017-11-17
    • 2012-02-03
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多