Azure ADアカウントを利用したADFSのクレームベース認可

こんにちは、国井です。

ADFSでクレームベース認証(認可)を行う場合、Active Directoryユーザーで認証を済ませていることが前提でした。つまり、ADFSを利用する場合、Active Directoryは必須だったわけです。
(だからこそ、ADFS = Active Directoryフェデレーションサービスと呼んでいたわけですね)

ところが、Windows Server 2012 R2 の次のバージョンからADFSの認証に利用するディレクトリサービスとして、 Active Directory以外のディレクトリサービスが利用できることが発表されました。
これにより、とても選択肢が広がると思います。

しかし、現行のバージョンのADFSでも、実はActive Directoryを使わなくても、
サインイン認証を済ませて、ADFSからトークンを発行できるのをご存知でしたか?

本来はActive Directoryにサインインしたユーザーに対してトークンを発行していましたが、

image

Microsoft Azure Active Directory(Azure AD)で認証を行えば、ADでサインインしていないユーザーでもADFSからトークンが発行できるのです。

image

こんな感じで、認証画面でADとAzure AD、どちらでサインインするか選べるのです。

image

Azure ADでサインインしたユーザーを使ってADFS経由でサービスにアクセスできるようになれば、
私たちのサービス利用の選択肢も広がってくるというものです。
では、設定を見てみましょう。

 

ADFSサーバー側の設定

ADFSサーバー側では[要求プロバイダー信頼]を設定します。

ADFS管理ツールから[要求プロバイダー信頼]-[要求プロバイダー信頼の追加]をクリックします。

image

[要求プロバイダー信頼の追加ウィザード]が起動します。

image

[データソースの選択]で、[オンラインまたはローカルネットワークで公開されているプロバイダーについてのデータをインポートする]を選択し、フェデレーションメタデータとして、https://login.windows.net/<Azure ADドメイン名>/Federationmetadata/2007-06/Federationmetadata.xmlと入力します。

image

[表示名の指定]で、表示名となる名前を適当に入力します。

FSAzure004

ウィザードの残りの画面はすべてそのままで完了します。

image

FSAzure006

[要求規則の追加]画面が表示されるので、要求規則を追加します。

FSAzure007

[規則テンプレートの選択]で、[カスタム規則を使用して要求を送信]を選択します。

FSAzure008

[規則の構成]で、クレームルール言語を利用して規則を記述します。今回は、クレームルール言語として、すべてのクレームをそのまま発行するように、とりあえずc:[]=>Issue(claim=c);と書きました。
そのほか、[要求規則名]に適当な名前を入力して完了します。

FSAzure009

[OK]をクリックして完了です。

FSAzure010

(2014年11月17日追記)
証明書利用者信頼から要求変換規則を開き、要求規則として、受け付け変換規則と同じ
c:[]=>Issue(claim=c);を設定しておいてください。
これでADFS側の設定は完了です。

image

 

Azure側の設定

Azure AD側ではADFSサーバーとの間での信頼関係を設定します。
事前にMicrosoft Azure管理ポータルからAzure ADドメインが操作できるよう、ドメインの登録をしておいてください。 (具体的な登録方法はSEの雑記さんの「Azure のサブスクリプションを起点として Windows Azure Active Directory のディレクトリ同期を設定」を参考にしていただくと良いでしょう。)
その上で、ドメインのアプリケーションを追加します。

image

追加ボタンを押すと出てくる[実行する作業を選択してください]から[組織で開発中のアプリケーションを追加]をクリックします。

image

[アプリケーション情報の指定]で、適当な名前を付けて次へ進みます。

image

[アプリケーションのプロパティ]で、
サインオンURLに

https://<ADFSサーバー名>/adfs/ls/

アプリケーションIDに

http://<ADFSサーバー名>/adfs/services/trust

をそれぞれ入力します。

 

image

ここまでで設定は完了。では、サインインを試してみましょう。
(今回は証明書利用者信頼に Windows Indetity Foundation SDKの
サンプルWebサイトを登録しています。)
WebサイトのURLを入力してアクセスすると、サインイン先の選択画面が表示されます。
この画面で、Azure ADを選択すると、

image

Azureのサインイン画面に推移し、Azure ADのユーザー名とパスワードの入力を求められます。

image

サインインが完了すると、Webページにアクセスできました。

無題

(2014年11月17日追記)
証明書利用者信頼に規則を追加しておくのを忘れたため、トークンにクレームが何も入っていないという状態が起きました。そりゃそうですよね。ああ、恥ずかしい!

ところが、Windows Identity Foundation SDKのサンプルページを見るとわかりますが、
トークンに何もクレームが入っていない!のです。
Azure ADでサインインしたユーザーに、どうやってクレームを追加するか?
この部分についてはもうちょっと調べてみたいと思います。

■ ■ ■

なお、Active Directoryで認証してから、Azure ADの属性情報を要求規則の中で使いたいというニーズもあるでしょう。その場合には、ADFSのクレームにSQL Serverデータベースを使う方法でも紹介したように属性ストアを設定します。
ただし、デフォルトで選べる属性ストアにAzure ADはありません。そのため、Visual Studioでdllファイル(ライブラリ)を作りこんであげる必要があります。この点についてはマイクロソフトのWebサイトで手順が紹介されています。

■How to create a Custom Attribute Store for Active Directory Federation Services 3.0
http://blogs.technet.com/b/cloudpfe/archive/2013/12/27/how-to-create-a-custom-attribute-store-for-active-directory-federation-services-3-0.aspx

Using Windows Azure Active Directory as an Attribute Store in AD FS
http://blogs.technet.com/b/cloudpfe/archive/2014/03/25/using-windows-azure-active-directory-as-an-attribute-store-in-ad-fs.aspx

ただ、この中で紹介されているMicrosoft.WindowsAzure.ActiveDirectory.GraphHelperという名前空間、名前が変わってしまって今では使えなくなっているようなのですよね。。

今日はここまで。