Cocoa/CocoaTouchからRemember The Milk APIを使ってみる(その3:認証)

Remember The Milk APIは当然個人のアカウントの情報を操作するわけだから、認証が必要。これが、IDとパスワードってわけには行かないちょっとややこしいところ。
今回もUser Authenticationのページに書いてある手順をそのまままとめると、

Frobを得る。

認証の要らないメソッドであるrtm.auth.getFrobを呼び出して、Frobというものをもらう。

認証用URLを作成する。

http://www.rememberthemilk.com/services/auth/?api_key=abc123&perms=delete&frob=123456&api_sig=zxy987

API KeyとFrobと、権限をパラメータにする。権限は

read
読み込みのみ
write
readに加えて追加や書き換えが可能
delete
writeに加えて削除が可能

そして、最後に前回と同様署名を付加する。

認証用URLをブラウザで開く。

Remember The Milkのサイトでこのアプリのアクセスを許可すると、Frobは晴れてTokenと交換可能になる。

FrobとTokenを交換する。

先程得たFrobをパラメータに、rtm.auth.getTokenを呼び出す。返ってきたTokenは保存しておいて、他のメソッドを呼び出すときにパラメータに付加する。
FrobはTokenと交換すると使えなくなるので保存しておいても意味は無い。Tokenはユーザーが許可を取り消すなどすると無効になるので、その時は改めてFrobを得るところから始める。

RTMのメソッド呼び出しに関してはいちいちコードを書く必要は無いと思う。一度ラッパーを作ってしまえば。
私が書いたFrobから認証URLを作るコードはこんな感じ。権限をdeleteに決め打ちしてる。

+(NSURL *)authenticationURLforFrob:(NSString *)frob {
	if (!__apiKey || !__sharedSecret) return nil;
	NSString *apiSigInput = [NSString stringWithFormat:@"%@api_key%@frob%@permsdelete", __sharedSecret, __apiKey, frob];
	NSString *apiSig = [apiSigInput md5];
	NSString *urlString = [NSString stringWithFormat:@"http://www.rememberthemilk.com/services/auth/?api_key=%@&perms=delete&frob=%@&api_sig=%@",
						   __apiKey, frob, apiSig];
	return [NSURL URLWithString:urlString];
}

使ったことないけど、IDやパスワードを外で入力するのではなく、そのサイトの中で外のアプリに権限を付与するというやり方は多分OAuthとかと似たようなもんなのかな。