【发布时间】:2016-07-08 14:29:17
【问题描述】:
对于一些背景信息,我尝试显示的网页是当前托管在 AWS 的 EC2 上的 Web 应用程序。后端是带有 Flask 的 Python,前端只是简单的 HTML/CSS。该 URL 具有 HTTP,因为它尚未使用 HTTPS 进行保护。打开此网页的 url 时,浏览器要求的第一件事是登录凭据(浏览器要求,而不是网站)。此页面确实在我的 iPhone 上的移动 Safari 中加载,并且 Safari 确实成功地要求提供凭据。如果我正确输入它们,它将正确加载页面。
所以我尝试了应用传输安全设置下的允许任意加载以及使用以下键的自定义异常域:
App Transport Security Settings Dictionary
Exception Domains Dictionary
my website URL Dictionary
NSIncludesSubdomains Boolean (YES)
NSExceptionAllowsInsecureHTTPLoads Boolean (YES)
NSThirdPartyExceptionAllowsInsecureHTTPLoads Boolean (YES)
NSExceptionMinimumTLSVersion String (TLSv1.0)
NSExceptionRequiresForwardSecrecy Boolean (YES)
但是,每当我在模拟器上启动应用程序时,我得到的只是一个白屏(如果需要,可以发布屏幕截图)。
这是我在 ViewController.swift 中的代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet var WebView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "My URL inserted here")
let request = NSURLRequest(URL: url!)
WebView.loadRequest(request)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
如果我使用 Allow Arbitrary Loads,当我查看输出框时,它确实不说“App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.”当我正确配置异常域时(使用允许删除任意负载)它也不会给我消息。只有当我使用 Exception Domain 更改设置时(同样,删除了 Allow Arbitrary Loads),我才会得到这个输出。
我开始认为这个问题超出了安全范围,如果我能采取任何建议或步骤来尝试解决这个问题,我将不胜感激,谢谢!
【问题讨论】:
-
您提到浏览器要求在页面上进行身份验证 - 您是否为此使用基本身份验证?如果是这样,默认情况下,Mobile Safari 上弹出的用户名和密码不会出现在 UIWebView 中。我想说最好的方法是在 URL 中包含用户名和密码,例如:username:password@example.com
-
@wyzkid207 我不能说我听说过基本身份验证(绝对初学者开发者,每天仍在学习很多东西哈哈)。我刚刚尝试了你提到的方法,但没有奏效。有没有办法让 webview 显示一些身份验证提示?或者作为一个不同的旁注,有没有办法指定加载哪个浏览器 UIWebView,比如我可以让它打开 Safari、Chrome 等吗?谢谢:)
-
如果你想在移动 safari 中打开 URL,你可以参考这个 SO:stackoverflow.com/questions/2899699/…(这可能是一个愚蠢的问题 - 但你可以像“apple.com”一样加载代码吗?你现在有吗?)
-
@wyzkid207 太棒了,我去看看。是的,无论我在其 URL 中使用 HTTP 还是 HTTPS,常规网站都会加载(前提是允许任意加载已启用)
标签: ios swift amazon-web-services uiwebview