忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

iOSにてOneDrive(SkyDrive)の動作確認3

わか

iOSのOneDriveの動作確認について記載します。
・getにて取得した日付データのNSDate変換方法
・複数アカウント使用時の認証回避

getにて取得した日付データのNSDate変換方法
日付データはUTC形式になっているので、NSDateに変換する方法を調べました。
NSDateFormatter* formatter = [NSDateFormatter new];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss'+0000'";
formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSDate* date = [formatter dateFromString:[dic objectForKey:@"updated_time"]];
・複数アカウント使用時の認証回避
LiveSDK-for-iOSをそのまま使用すると以下の問題があります。
「アカウントAでログイン後、アカウントBにログインするには
 一旦アカウントAでログアウトしなければならない。」
アカウントを切り替えるたびに、いちいち認証していたら手間ですので、
それを回避します。

LiveSDK-for-iOSではOAuth2.0という認証方式が採用されています。
一度認証画面でユーザIDとパスワードを入力して認証されると
その後は認証処理を飛ばすことが可能です。
これはTokenを使用することで可能にしています。
⑴ユーザID、パスワードで認証する
⑵Tokenを受け取る
⑶その後はTokenを使用してAPI(get, downloadなど)を実行する

LiveSDK-for-iOSの場合、Tokenはどこに保存されているかというと
「LiveService_auth.plist」というファイル名で保存されています。
※まだ調査中ですが、暗号化もされずTokenがそのまま保存されているため
セキュリティ的に危ない気がします。keyChain等使用して暗号化保存する方が
いいと思います。

さて複数アカウントの認証回避ですが、Tokenを使い分けることで実現可能です。
LiveSDK-for-iOSをそのまま使用するとTokenが一つしか保存されません。
アカウントAをログアウトせず、アカウントBにログインしようとすると
TokenがアカウントAになっていますので、アカウントAにアクセスしてしまいます。
(ログアウト処理にてTokenが削除されます)

なので、アカウントAで認証した際に、TokenをアカウントAのTokenとして保存しておきます。
(例えばNSDictionaryで分けるとか、Token_A.plistで保存するとか)
アカウント毎に保存したTokenを使用すれば、認証を飛ばすことができるわけです。
ちなみにLiveAuthStorage.mにてTokenのファイル読み込み/書き込み処理がありますので、
そこを修正します。
また、実装内容によってはログイン処理の前にCookieの削除処理が
必要になってくるかもしれません。

ここまで分かるのに、結構時間がかかりました。
OAuth2.0の仕組みとかCookieとかいろいろ調べるはめになりましたが
いい勉強になりました。
何か問題ありましたら、コメントでお願いします。

拍手[0回]

PR