実際にやっているのは、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の使い道は色々とありますので、一つ簡単なアプリケーションを作っておくと良いかも知れません。