App Transport Security通过自定义网址方案阻止路由

时间:2017-03-10 11:48:22

标签: ios swift react-native url-scheme

我的iOS应用程序(用Swift和React Native编写)有一个自定义网址方案,允许我从例如路由到应用程序像myappscheme://https://www.mywebsite.com/somematerial这样的Safari。如果我在我的应用中启用App Transport Security,则会阻止通过自定义网址方案进行路由,并收到以下消息:

  

App Transport Security已阻止明文HTTP(http://)资源   负载,因为它是不安全的。可以通过配置临时例外   您应用的Info.plist文件。

但是,如果我禁用ATS,应用程序会按预期路由。我没有通过我的应用程序中的http访问任何链接,在我的路由中,我总是通过https获取数据。因此,我不知道ATS阻止此路由的原因。你知道我是否需要提供一些关于我的网址方案的其他信息吗?

请参阅Info.plist中的我的ATS配置:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

我还将我的自定义网址列入白名单:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>myappscheme</string>
</array>

3 个答案:

答案 0 :(得分:1)

此问题已得到解决。我注销了我正在击中的端点并通过在终端中检查它是否满足ATS要求:

nscurl --ats-diagnostics https://www.example.com/

事实证明,我尝试获取的特定子域未能满足所有ATS要求。我的服务器团队修复了问题并使端点安全。

答案 1 :(得分:0)

我认为问题在于React Native,你提到你使用Safari作为自定义链接的来源,这可能意味着你正试图调试你的应用程序&amp;在Simulator中自定义路由,所以也许你的问题与React Native有关。如果React Native脱机工作时在真实设备上具有相同的行为,请更新您的问题。

  

通过添加临时禁用App Transport Security(ATS)   NSAllowsArbitraryLoads Info.plist文件的from graphviz import Graph, Digraph g = Digraph('G', filename='process.gv', engine='dot') g.node('Tests') g.node('Devices') # Tests g.edge('TestName', 'Tests') # Devices g.edge('Serial', 'Devices') g.view() 条目。自ATS以来   不允许对IP地址的不安全HTTP请求,您必须完全   禁用它以在设备上运行。这只是一个要求   在设备上进行开发,除非您无法解决问题   应该为生产版本启用ATS。欲获得更多信息,   有关配置ATS的信息,请参阅this post

React Native Documentation - Running On Device

答案 2 :(得分:0)

配置info.plist设置。

您可以添加以下特定域:

<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.google.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>