如何在 Android 上的 VPNService 中添加 Http 代理身份验证凭据?

问题描述 投票:0回答:1

我正在尝试在我的 React Native Android 应用程序中通过假 VPN 进行代理设置。感谢 VpnServiceandroid.net.ProxyInfo package,我将代理设置提供给构建器。 但我使用的代理有身份验证要求。我猜 ProxyInfo 不会直接获取凭据。我怎样才能做到这一点?

当我使用当前设置进入任何网站时,它会显示以下消息。

不是身份验证或无效的身份验证凭据。请务必更新您的代理地址、代理用户名和密码

我尝试了下面的其他方法,但我不能说它有效。当我尝试打开该网站时,我的浏览器通过弹出窗口询问我用户名和密码,但弹出窗口非常不稳定,我什至无法输入它。

Authenticator.setDefault(new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                Log.d("VPNService", "VPN Auth Settings...");
                return new PasswordAuthentication("username", "password".toCharArray());
            }
        });

我应该补充一点,这个代理在某些地方不会特别工作。所以只要VPN有效,它就会是活跃的,需要一个全局的方法,而不仅仅是一个应用程序的效果。

我需要的是在使用 VPN 代理时如何提供身份验证信息?

提前感谢您的解释性答案

android network-programming vpn http-proxy android-vpn-service
1个回答
0
投票

TLDR

我要说“”。

原因如下:

我查看了文档 -> https://developer.android.com/reference/android/net/ProxyInfo

它不允许您提供代理身份验证,传统上是用户名+密码。

它确实提供使用代理自动配置(.pac),但该配置格式也不允许您声明代理身份验证。

历史

这项技术来自于Netscape vs. IE 5/6时代的浏览器战争。这甚至发生在 HTTPS 普及之前,更不用说需要了。 HTTP 身份验证和代理(通过 HTTP)身份验证都使用基本身份验证样式,该样式仅位于标头中。

有人担心让用户将密码保存到浏览器配置中,因此很长一段时间,两种身份验证只能通过交互式提示输入。

这也是在密码管理功能普及之前,但还可以使用单点登录。因此,用户通常只需要在浏览器会话中回答一次代理身份验证挑战,这很烦人,但并非难以忍受。

看起来这个 API 从那时起就没有扩展过。


在评论中建议解决方法之前,我会让大家理解这一点。

© www.soinside.com 2019 - 2024. All rights reserved.