"http://"의 API를 실행할 수 있도록(Swift)

4605 단어 ATSSwift4SwiftHTTPapi

소개



이 기사 에서 API 클라이언트를 구현했으므로 즉시 사용하려고했지만 다음 오류가 발생하여 떨어졌습니다.

오류와 번역을 전기합니다.
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.
App Transport Security(ATS)は安全でないため、平文HTTP(http://)リソースの負荷をブロックしました。 一時的な例外は、アプリのInfo.plistファイルで設定できます。
since it does not conform to ATS policy
ATSポリシーに準拠していないため

분명히 HTTP 통신은 안전하지 않으므로 기본적으로 차단하는 것 같습니다. HTTPS 통신은 차단하지 않습니다.
Info.plist 로 설정하면 통신할 수 있다는 것이므로, 그 방법을 소개합니다.

환경


  • OS: macOS High Sierra 10.13.1
  • Xcode: 9.2
  • Swift: 4.0.3

  • 해결책



    솔루션은 크게 두 가지가 있습니다.

    ①ATS를 무효로 한다



    장점



  • 도메인을 지정하지 않고 모든 API를 사용할 수 있습니다.
    HTTP/HTTPS 양쪽의 통신을 모두 허가하게 되므로, 도메인을 지정하지 않고 모든 API를 사용할 수 있습니다.
    「http://」의 API를 다수 사용하는 앱에서는 이쪽의 해결책을 검토해도 좋을지도 모릅니다.

  • 단점



  • 안전성 저하
    모든 HTTP 통신을 허용하므로 안전성이 저하됩니다.
    구체적으로는 통신을 도청·조절되는 리스크가 높아집니다.

  • Info.plist 설정



    App Transport Security Settings > Allow Arbitrary Loads 값을 YES로 지정하면 ATS가 비활성화됩니다.


    ②ATS를 유효한 채로 통신을 허가하는 도메인을 지정한다.



    장점



  • 안전성 저하 방지
    지정한 도메인만 HTTP 통신을 허용하므로 안전성 저하를 방지합니다.

  • 단점



  • 도메인 지정이 번거롭다
    「http://」의 API를 다수 사용하는 앱의 경우, 모든 도메인을 수동으로 지정하지 않으면 안되기 때문에 수고가 걸립니다.

  • Info.plist 설정




    이름

    유형
    설명


    App Transport Security Settings
    NSAppTransportSecurity
    Dictionary
    ATS 설정 상단

    Allow Arbitrary Loads
    NSAllowsArbitraryLoads
    Boolean
    모든 HTTP 통신 허용

    Allow Arbitrary Loads in Web Content
    NSAllowsArbitraryLoadsInWebContent
    Boolean
    WebView 전용 모든 HTTP 통신 허용

    Exception Domains
    NSExceptionDomains
    Dictionary
    예외 도메인 상단

      {도메인}
    이름처럼
    Dictionary
    예외로 지정하는 도메인

      NSIncludesSubdomains
    이름처럼
    Boolean
    하위 도메인 포함

      NSTemporaryExceptionAllowsInsecureHTTPLoads
    이름처럼
    Boolean
    대상 도메인의 HTTP 통신 허용

      NSExceptionMinimumTLSVersion
    이름처럼
    문자열
    TBD

      NSTemporaryExceptionRequiresForwardSecrecy
    이름처럼
    Boolean
    TBD

      NSRequiresCertificateTransparency
    이름처럼
    Boolean
    TBD



    우편번호 검색 API
    htp : //지 pcぉ d. 네 bs네 t. 이. jp/
    HTTP 통신 허용


    이 예에서는 ibsnet.co.jp의 하위 도메인을 포함하여 HTTP 통신을 허용합니다.

    결론



    다음이 바람직합니다.
    HTTP 통신하고 싶은 도메인이 적다→해결책②
    많다→해결책①도 검토

    참고 링크


  • NSAppTransportSecurity - 정보 속성 목록 | Apple 개발자 문서
  • NSExceptionDomains - NSAppTransportSecurity | Apple Developer Documentation
  • iOS9에서 HTTP 통신을 할 수 없을 때의 해결책 - Qiita
  • iOS9 ATS 문제 - Qiita
  • [Swift3] 어둠 속에서 Allow Arbitrary Loads 하는 것은 이제 그만하자

  • Xcode - ATS를 allow로 해도 http://에 액세스 할 수 없다 | teratailAllow Arbitrary Loads in Web Content 를 ON 으로 하면 Allow Arbitrary Loads 의 설정이 무시되게 되는 것 같습니다.
  • 좋은 웹페이지 즐겨찾기