【问题标题】:How to fix a "403 - disallowed_useragent" with the native Google Drive iOS SDK?如何使用本机 Google Drive iOS SDK 修复“403 - disallowed_useragent”?
【发布时间】:2017-03-28 19:46:05
【问题描述】:

我正在遵循https://developers.google.com/drive/ios/quickstart?ver=swift 提供的说明。

昨天它还在工作,但今天早上它似乎总是失败。奇怪的是我使用的是他们的原生 SDK。我不知道为什么它认为我正在使用网络视图。确切的错误是:

不允许此用户代理向 Google 发出 OAuth 授权请求,因为它被归类为嵌入式用户代理(也称为网络视图)。根据我们的政策,仅允许浏览器向 Google 发出授权请求。我们为原生应用提供了多个库和示例,以在浏览器中执行授权请求。

我克隆了:https://github.com/googledrive/ios-quickeditor 并得到了同样的错误。

【问题讨论】:

标签: ios google-drive-api


【解决方案1】:

试试这个,它适用于 "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"

Google 限制来自 web 视图的身份验证。它接受 safari webkit useragent .override useragent with above useragent string 它会起作用。

【讨论】:

  • 这个 DID 解决了我的 webapp 的问题,但是这个解决方案有一些缺点。首先,Google 可能会向用户发送警报,告知其检测到在新的 WINDOWS 设备中进行了登录,这听起来像是网络钓鱼。另一个问题是,由于新的固定用户代理,它可能会扭曲您的分析。
【解决方案2】:

这是不幸的答案:是的,您使用的是 Google 的 iOS Quickstart 中的示例,也就是您所说的“本机 SDK”。但是,这已经过时了,因为它使用的正是 Google 不希望您再使用的嵌入式 Web 视图。

如果它之前确实有效,但突然停止了(就像我自己经历的那样),这可能与您更改与客户端 ID 相关的内容有关。对于存在一段时间的客户端 ID,似乎有更长的宽限期,直到 Google 硬阻止 Web 视图的使用(我理解,现在应该仍然只是一些警告)。我最近出于不相关的原因创建了一个新的客户端 ID,似乎正是造成这种情况的原因,让我不得不在短时间内为新版本替换 Google Drive 身份验证代码。

关于选项(到目前为止,Google 博客文章中您的问题列表中只有其他回复者),经过一番研究,GTMAppAuth 对我来说似乎是最可行的选择,因为我对完整用户不感兴趣登录和退出。但我可能错了。

GTMAppAuth 有 iOS 的示例代码,但只是在 Objective-C 中。我还没有完成它。通常,您的代码逻辑会发生如下变化:您当前的解决方案仅在您的应用程序中进行身份验证。它是异步的,但不会离开您的应用程序。新解决方案要求您在准备和记住回调功能时在应用程序中启动身份验证。然后,身份验证启动会在外部打开一个浏览器,一旦完成,就会在您的应用程序委托中产生一个 URL 回调。然后在您的应用委托中检查准备好的回调,并根据外部调用的结果状态通知用户外部身份验证成功或失败。

【讨论】:

    【解决方案3】:

    将此代码添加到您的AppDelegate.m(假设它在 ObjC 中):

    NSString *userAgent = @"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602";
    
    // set default user agent
    NSDictionary *dictionary = [[NSDictionary alloc]initWithObjectsAndKeys:userAgent,@"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:(dictionary)];
    

    【讨论】:

      【解决方案4】:

      您可以使用 CloudRail 的第 3 方 SDK 解决此问题,该 SDK 适用于 Google Drive 和新的身份验证限制。 This tutorial 准确地向您展示了如何使用外部浏览器而不是网络视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多