我有一个阅读器应用程序,我们正在将阅读器自定义为某个机构,以允许用户使用该应用程序并从其内容中读取内容。我必须验证他是否在某个代理范围内,并且他已登录到该代理。
我个人在网络和代理方面的经验很少,因此我想问一下这是否可行,如果可行,什么是最好的解决方法?
在可行的情况下,Apple会接受吗?Apple团队如何测试功能?
我已经解决了这个问题,但是我不确定这是否是我需要的: How can I get the username for a proxy host from KeyChain?
您的指导将不胜感激。
答案 0 :(得分:1)
我会去使用设备的公共WAN IP地址来检查代理使用情况。
知道代理的IP后,我会将它们放在白名单中,最好存储在外部服务器上,该外部服务器将由应用查询,而不是在代理服务器更改其IP的情况下将其硬编码到应用中。
在每个应用程序启动时,我都会获取设备的公共IP,如果用户使用代理,它将是代理IP之一。因此,您可以简单比较这些IP,如果它们匹配,您就知道用户正在使用代理。
如果您不知道代理的特定IP,则可以使用很多服务来确定IP是否属于代理以及代理的类型。 IP2location是提供此类服务的众多网站之一。
答案 1 :(得分:0)
据我了解,您想检查全局代理设置。 可以这样做:
NSDictionary *proxySettings = CFBridgingRelease(CFNetworkCopySystemProxySettings());
NSString *type = proxySettings[(id)kCFProxyTypeKey];
NSString *hostname = proxySettings[(id)kCFProxyHostNameKey];
NSNumber *port = proxySettings[(id)kCFProxyPortNumberKey];
NSString *username = proxySettings[(id)kCFProxyUsernameKey];
NSString *password = proxySettings[(id)kCFProxyPasswordKey];
然后,您可以进行检查以验证代理可能需要。有关proxySettings
词典中其他可能的键和值,您可以检查CFProxySupport.h
文件。
您可以在代理后面的服务器上存储一些JSON文件,其中将描述您要验证的代理的配置,例如
{
"type":"https",
"host":"my_awesome_proxy.edu",
"port":8080
}
在应用程序启动时,您的应用程序将首先下载此文件,然后检查它是否位于文件中指定的代理之后。 这将使您的应用程序将来不受代理设置更改的影响,因此您无需将应用程序与另一个经过硬编码的代理服务器值一起提交到应用程序商店进行验证。
在应用审核期间,Apple可能会要求您向他们提供访问凭据以测试该应用。因此,在审阅时,您的代理应该是可全局访问的,并配置了一些测试凭据,这些凭据将转发给Apple。
P.S。 验证代理的方法非常不安全,并且到大学的Intranet的VPN连接听起来更加可靠。