OAuth2Clientの使い方

OAuth2通信を行うためのライブラリであるOAuth2Clientの基本的な使い方と注意点です。

OAuth2Clientの動作

OAuth2Clientは、シングルトンパターン構造になっており、NXOAuth2AccountStore.sharedStoreを通してアカウントを操作します。

まず、前提としてOAuth2Clientの設定を初期化する必要があります。AppDelegateのinitializeにおいて初期化することが推奨されています。

NXOAuth2AccountStore.sharedStore()
    .setClientID( "aClientId",
        secret: "secret",
        authorizationURL: NSURL(fileURLWithPath: "authorizationURL"),
        tokenURL: NSURL(fileURLWithPath: "tokenURL"),
        redirectURL: NSURL(fileURLWithPath: "redirectURL"),
        forAccountType: accountType())

公式のWikiには設定例がたくさん上がっているので、それを見ながら確認すると良いかと思います。(例えばGitHubの場合)

実際にOAuth2認証を行うには、例えば外部ブラウザを利用する場合は以下のようにします。

NAOAuth2AccountStore.sharedStore.requestAccessToAccountWithType("MyAccountType")

この認証の成否は、Notificationによって確認することができます。

  • 成功:NXOAuth2AccountStoreAccountsDidChangeNotification
  • 失敗:NXOAuth2AccountStoreDidFailToRequestAccessNotification

認証に成功すると、アカウントはNXOAuth2AccountStore.sharedStore.accountsにリストの形で保持されます。

OAuth2認証が必要なページへのリクエストには、NXOAuth2Request.performMethodを利用します。

NXOAuth2Request.performMethod("GET",
    onResource: NSURL(fileURLWithPath: "https://xxx.yyy.zz/oauth/abc"),
    usingParameters: nil,
    withAccount: account,
    sendProgressHandler: nil,
    responseHandler: responseHandler)

withAccountには、accountsに保持されたアカウントを利用することができます。

注意点

さて、OAuth2Clientは上で見たようにシングルトンパターンでアカウント情報を保持していますが、この永続化の際にKeychainを利用しています。

Keychainとは、iOSが用意している強力なパスワード管理システムです。

OAuth2Clientは、取得したアカウント情報を自動でこのKeychainに格納し、永続化しているので次回起動時にどうなるかなどをあまり悩む必要がありません。非常に便利です。

ただ、Keychainに自動で格納してくれるという処理のため、Keychainへの保存をコントロールしたい場合には不満が生じる可能性があります。

その場合には、拡張クラスを作るなどの対応策が考えられるでしょう。

参考