銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Windows Store App と Azure Mobile Services で Microsoft アカウント認証を行う

Windowsタブレットもようやく普及してきて、ひとりで複数のWindows8.1端末を持つ人が増えてきたのではないでしょうか。今日はそういうユーザー向けにストアアプリでユーザー認証を行うお話です。

Azure Mobile Services を使うとプッシュ通知や、スケジュールジョブなど一通りのサーバーサイドの処理を簡単に構築できます。が、最初に書いたようにひとりで複数の端末を所有しているケースで、端末ではなくユーザー単位で処理を行いたい場合、少し工夫が必要になります。今回は Mobile Service の機能を使って、Microsoft アカウント認証をする方法の紹介です。(なお、Twitter アカウント認証の場合は

Azure Mobile Services でアクセス許可を制限した Custom API に カジュアルにアクセスする - 銀の光と碧い空

に書いています)

ひとまず、Azure Mobile Servicesは作ったとします。管理ポータルのIDタブを開いてみましょう。

f:id:tanaka733:20140127015139p:plain

ここにある、クライアントIDとクライアントシークレットを入力するのが当面の目標です。が、なぜかヘルプのページに載っている情報が古かったりします...

クライアントIDとクライアントシークレットを取得するには、まず Windows ストアアプリ デベロッパーセンターでアプリの名前を付けます。そして、アプリの編集でサービスを選びます。

f:id:tanaka733:20140127015529p:plain

真ん中右の方にある「Liveサービスサイト」というリンクを選択します。

f:id:tanaka733:20140127015918p:plain

サービスの認証を選ぶと、「パッケージ セキュリティ ID (SID) 」と「クライアント シークレット 」が表示されます。クライアントシークレットの方はMobile Services のクライアントシークレットの欄に入力します。そして、SIDの方はクライアントIDではありません

f:id:tanaka733:20140127020005p:plain

プッシュ通知をする場合はSIDを入力しますが、Microsoftアカウントで入力する場合はLive Connectのアプリを編集する必要があります。

Live Connect デベロッパー センター のアプリ一覧 にログインします。Windows ストアアプリで登録した名前のアプリが表示されているはずなので、それを選択して設定の編集をします。

デフォルトの言語などリリース前に編集したおいた方がいい項目もありますが、まずは「API設定」を選びます。すると、クライアントIDが表示されているので、これをMobile ServicesのクライアントIDに入力します。 また、「リダイレクト ドメイン」の項目にはMobile ServicesのURLを入力しておきます。

f:id:tanaka733:20140127020818p:plain

これで保存すればひとまずサーバー側の設定は完了です。

次に、ストアアプリの方を編集します。まずは、ストアアプリを先ほどデベロッパーセンターで登録したアプリと関連付けておきます。

あとは、認証を行うためのコードを入れるのですが、Nuget から WindowsAzure.MobileServicesをインストールします。そして、Appクラスに MobileServiceClient のプロパティを用意しておいて(認証トークンなどはAzureポータルのMobile Servicesのダッシュボードを参照)、LoginAsync メソッドを呼ぶようにします。

これで準備OKです。実行してみると、このように聞かれます。

f:id:tanaka733:20140127022812p:plain

パスワードをいれるとアプリの情報が表示され確認が求められます。

f:id:tanaka733:20140127022823p:plain

ここでOKを押すと認証が通って、アプリからユーザー情報が取得できます。といっても、MobileServiceUser には TokenとIDしかないのですが、今回の目的だとIDさえあれば十分です。

f:id:tanaka733:20140127023022p:plain

あとは、このIDは保存し、認証削除機能を用意しておいて、ユーザーが認証を解除したいときはこのIDを削除するようにすればよいと思われます。

という感じで、いくつかはまりそうなポイントがありましたが、ユーザー認証することができました。