6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Swift] AlamofireのSessionDelegateを受け取る

Posted at

SwiftのAlamofireを使用してのSSL通信の認証に少しはまったので備忘録。
※基本的な使い方は、他の人を参照下さい。
※この方法が正しいのかは分かりませんが、とりあえず成功はしました。


Objectice-C時代の<-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge>をAlamofireで受け取れればと、
いろいろ調べたり、Alamofireのコードをちょっと調べたりして、

AlamofireのSessionDelegateクラスにある (NSURLSessionAuthChallengeDisposition, NSURLCredential!))?>が受け取れるようになれば実現できそう。

このSessionDelegateクラスは、Alamofireのinitにて生成されていたので、以下の形で受け取るようにしました。

var alamoManger: Manager!
alamoManger = Manager(configuration: configuration)
let delegate: Manager.SessionDelegate = alamoManger.delegate

// HTTPS Authentication
delegate.sessionDidReceiveChallenge = { (session: NSURLSession!, challenge: NSURLAuthenticationChallenge) in
    return (.UseCredential, self.createSSLCertificate(challenge)! )
}

NSURLCredentialを生成するメソッド

func createSSLCertificate(challenge: NSURLAuthenticationChallenge) -> NSURLCredential! {

    if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPBasic
        || challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPDigest{
        // Basic認証
    }
    else {
        if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
            // SSL通信
        }
    }
}

リクエストする時はpublicクラスのAlamofireではなく、生成したManagerクラスをして行います。

alamoManger
    .request(.POST, url, parameters: parameters)
    .responseJSON({(request, response, data, error) in
    )

とりあえず、このコードで成功はしたのですが、何か間違っていたら教えて下さい。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?