나의 플랫폼/iOS
[iOS] Kingfisher 이미지 다운로드시, Authentication with NSURLCredential
GsBOB
2017. 6. 27. 13:59
이건 혹시, 테스트 서버에 접근 할 때, SSL 인증을 통과 시키고자 하시는 분들에게 도움을 드리고자 공유 합니다.
iOS 출시를 위한 서버로 접근은 이 코드를 적용 시켜서는 안됩니다.
먼저 , .plist에 예외 처리 설정을 추가 합니다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
우선, Kingfisher wiki에 SSL 인증과 관련 해서 아래와 같은 내용이 있다.
Modify a request before sending
let modifier = AnyModifier { request in
var r = request
r.setValue("", forHTTPHeaderField: "Access-Token")
return r
}
imageView.kf.setImage(with: url, placeholder: nil, options: [.requestModifier(modifier)])
NSURLCredential
Authentication with // In ViewController
ImageDownloader.default.authenticationChallengeResponder = self
extension ViewController: AuthenticationChallengeResponsable {
func downloader(_ downloader: ImageDownloader,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)
{
// Provide your `AuthChallengeDisposition` and `URLCredential`
let disposition: URLSession.AuthChallengeDisposition = // ..
let credential: URLCredential? = //..
completionHandler(disposition, credential)
}
}
출처 : https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet
위 내용 중 첫번째는 Access-Token이 있어서 인증을 하는 방식 이다.
만약, SSL 인증을 우회 하는 방식으로 하고자 한다면 아래 형태로 하시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import UIKit import Kingfisher open class SomeViewController: UIViewController, AuthenticationChallengeResponsable { open override func viewDidLoad() { super.viewDidLoad() ImageDownloader.default.authenticationChallengeResponder = self } public func downloader(_ downloader: ImageDownloader, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { let disposition = URLSession.AuthChallengeDisposition.useCredential let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!) completionHandler(disposition, credential) } } | cs |
위와 해주시면 됩니다.
참고하세요.