3

我的应用程序有两个视图:

  • 等待用户凭据的登录视图

  • 包含 webview 的主视图

当用户输入他的凭据时,本机异步 POST 方法被发送到服务器。如果凭据有效,用户将被重定向到 webview 视图并使用load(request)方法加载它。

注意:请求也是使用上述凭据的 POST 方法。

这种两步验证背后的原因是为了避免使用 403 错误登录/密码对打开 web 视图;如果第一步验证失败,用户将停留在登录视图上。

这是解释身份验证如何工作的流程图

10.0 和 11.2 之间的 iOS 版本运行应用程序没有任何问题。使用 iOS 11.3 的设备和模拟器打开 web 视图时出现 403 错误。

到目前为止,我可以断言两件事(并且已经过我们的后端测试):

  • 使用异步 POST 方法验证成功,这意味着凭据正确,并且应用程序和服务器之间的通信按预期工作

  • 加载 webview 时,服务器没有收到任何用于身份验证的参数,这解释了 403 登录/密码错误。

目前这个问题使我的应用程序无法使用,因此非常需要快速修复。GET 请求已经过测试,它们的参数发送没有任何问题。

任何建议都将受到欢迎。

TL;DR - 由于 iOS11.3 POST 请求在 WKWebViews 中无法正常工作,我如何使用 GET 请求进行或多或少安全的身份验证?

PS:无法为其添加 iOS 11.3 标签,如果有人可以添加它,将不胜感激。

4

4 回答 4

2

我已经使用 WKWebView 对 iOS 12.1.4 进行了测试,并按预期工作。您只需要确保请求具有正确的标头。在我的情况下,问题是由缺少的内容类型给出的,它必须是“ application/x-www-form-urlencoded ”。因此,您需要确保正文部分符合rfc-1738并且空格字符表示为“+”,如此所述。

关于 WKWebView 提到的委托 webView:decidePolicyFor: body 部分没有显示,但它实际上是发送的。出于内存/安全原因,我可能假设显示为空,或者可能只是一个错误,到目前为止并不太关心

希望能帮助到你

于 2019-03-05T13:18:21.853 回答
1

我使用 UIWebView 而不是 WKWebView 并且它有效!

于 2018-07-31T19:59:16.203 回答
0

遗憾的是你不能用 WKWebView 做到这一点。

它肯定在 webView:decidePolicyForNavigationAction:decisionHandler: 中不起作用,因为 navigationAction.request 是只读的,并且是您无法更改的非可变 NSURLRequest 实例。

如果我理解正确,WKWebView 在单独的内容和网络进程中运行沙盒,至少在 iOS 上,没有办法拦截或更改它的网络请求。

如果您退回到 UIWebView,您可以执行此操作。

于 2018-10-02T14:22:12.643 回答
0

我在这里遇到了同样的问题:(,不知道为什么 WKWebview 加载 URL 请求时没有发送 POST 参数。您可以使用 URL 会话加载站点内容(html 资源)并将其填充到 WKWebview。但它不会保留历史记录,如果您的页面使用 cookie,则为 navigationRequest。

于 2018-04-21T07:46:53.657 回答