Objective-C
iPhone
iOS

[objc][memo] UIWebViewでDIGEST認証

More than 3 years have passed since last update.

UIWebViewでダイジェスト認証したい場合、NSURLProtectionSpaceというのを使うらしい。
URLにIDPASSを含んでもいいんだけど、何らかの理由で含められない場合。

AppDelegateの頭とかで呼べば、以降のUIWebViewの認証が通る(?)ようです。
authenticationMethodNSURLAuthenticationMethodHTTPDigestを指定。

AppDelegate.m

#define DIGEST_USER_NAME = @"yourname";

#define DIGEST_PASSWORD = @"yourpassword";

#define DIGEST_HOST     = @"www.hoge.jp"

// realmは、「curl -Iv http://www.hoge.jp/fuga/piyo」等で調べられる
#define DIGEST_REALM    = @"Input ID and Password" 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    //------------------------------------
    // ダイジェスト認証
    //------------------------------------

    NSURLCredential *creds = [NSURLCredential 
        credentialWithUser:DIGEST_USER_NAME password:DIGEST_PASSWORD
        persistence:NSURLCredentialPersistenceForSession];

    NSURLCredentialStorage* store = [NSURLCredentialStorage sharedCredentialStorage];

    NSURLProtectionSpace* protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:DIGEST_HOST
            port:80
            protocol:@"http"
            realm:DIGEST_REALM
            authenticationMethod:NSURLAuthenticationMethodHTTPDigest];

    [store setCredential:creds forProtectionSpace:protectionSpace];
    return YES;
}

参考

やっと人類の悲願だった「UIWebView でBasic 認証のかかったサイトを閲覧する方法」がわかった - laiso - iPhoneアプリ開発グループ

さいごに

なにか間違いがありましたらご指摘いただけるとありがたいです