2013年4月23日火曜日

[WAAD]アプリケーション統合でGraph APIを簡単に実行

先日のWindows Azure Active Directory(WAAD)の正式リリースでWAADと統合するアプリケーションを簡単に登録することが出来るようになりました。

実際にやっているのは、GoogleのAPIコンソールと同じく、OAuthのクライアントを登録することだけで、

  • アプリケーション情報の登録(各種エンドポイント)
  • クライアントIDとキー(Secret)の取得
  • アプリケーションへ付与するWAADへのアクセス権限を設定

などが行えます。

ここでアプリケーションへ与えることが出来る権限ですが、

  • シングルサインオン
  • シングルサインオン、ディレクトリデータの読み取り
  • シングルサインオン、ディレクトリデータの読み取りと書き込み


の3種類が用意されています。

シングルサインオンはSAMLプロトコルを使ってWAADとの認証連携をする機能、ディレクトリデータの読み取り、書き込みについてはGraph APIを使ってディレクトリデータを操作するための機能を指します。

と、いうことで今回は以前紹介したGraph APIを使って行うWAADのディレクトリデータの操作をアプリケーション統合の機能を使って、より簡単に実行する方法を紹介します。
(といっても簡単になるのはAccess Tokenの取得だけですが)

以前の記事では、Graph APIを利用するためのAccess Tokenを取得するのに、AAL(Windows Azure Authentication Library)を使ったコードを書いていましたが、この部分をアプリケーション統合機能で大幅に簡略化します。

手順はシンプルで、以下のステップだけです。
1.ディレクトリデータの読み取り権限のあるアプリケーションを作成する
  ⇒ClientID / Client Secretを取得する
2.WAADのOAuthのトークンエンドポイントへClient Credentials Grantフローでアクセスする
  ⇒Access Tokenを取得する
3.取得したAccess Tokenを使ってディレクトリデータを読み取る

※尚、OAuth2.0の各種フローと注意点についてはこの辺りを参照してください。
 RFCとなった「OAuth 2.0」――その要点は?

では、さっそくやってみます。


■ディレクトリデータの読み取り権限のあるアプリケーションを作成する

Windows Azureの管理ポータル(https://manage.windowsazure.com/)へログインし、Active Directoryの管理からディレクトリ⇒統合されたアプリケーションを選択します。


アプリの作成からアプリケーションを新規作成します。

[組織で開発中のアプリケーションを追加]を選択します。

アプリケーションに任意の名前を付けて、アクセス権を設定します。とりあえずユーザ情報の読み取りをしたいので、「シングルサインオン、ディレクトリデータの読み取り」を選択します。

URLやアプリIDなどは今回は特に使わないので適当に入れておきます。


取り敢えずアプリケーションが追加されるので、左上の[構成]メニューを開きます。


クライアントIDが生成されているのがわかります。クライアント Secretを生成したいので[キー]のところで時間の指定をします。


1年もしくは2年が選択できるので取り敢えず1年を選択します。保存するとキーが表示されます。


これで必要な情報(Client ID / Client Secret)がそろいました。


■WAADのOAuthのトークンエンドポイントへClient Credentials Grantフローでアクセスする

次は、取得したClient ID / Client Secret)を使ってAccess Tokenを取得します。

手順は簡単で、WAADのOAuthのトークンエンドポイントである
  https://login.windows.net/<テナントドメイン名>/oauth2/token?api-version=1.0
に、

 - grant_type : client_credentials
 - resource : https://graph.windows.net
 - client_id : <先ほど取得した Client ID>
 - client_secret : <先ほど取得した Client Secret>
をPOSTするだけです。
※POSTするデータはURL Encodeしておく必要があります。

いつものAdvanced REST Clientを使ってアクセスしてみます。


すると、JSON形式でAccess Tokenが返ってきます。


これでAccess Tokenを取得できました。
コードを書かずに取得できるというのはとっても素晴らしいことです。



■取得したAccess Tokenを使ってディレクトリデータを読み取る

ここからはこれまでも何回か紹介した方法ですが、取得したAccess TokenをAuthorizationヘッダにセットしてディレクトリからユーザ一覧を取得します。


ユーザ情報が取得できました。




どうでしょうか?
Access Tokenの取得が格段に楽になっているのがわかると思います。
Office365のディレクトリ同期状況の確認などGraph APIの使い道は色々とありますので、一つ簡単なアプリケーションを作っておくと良いかも知れません。

0 件のコメント: