ADFS(Active Directory Federation System)でOpenID Connect

こんにちは、サイオステクノロジー技術部 武井です。マイクロソフト社が提供するシングルサインオンのシステム「Active Directory Federation System」(以降、ADFS)が、OpenID Connectのプロバイダーになるんです。これが激しく便利でしたので、その設定方法を記載しますヮ(゚д゚)ォ!

OpenID Connectの詳細につきましては、本ブログの以下の記事をご覧ください。

多分わかりやすいOpenID Connect

OAuthやOpenID Connectで使われるstateパラメーターについて

JSON Web Tokenによる認証

設定してみましょう

ADFSの管理画面にアクセスします。「Application Group」を右クリックして、「Add Application Group…」をクリックします。

Screen Shot 2018-08-01 at 10.34.40

 

「Name」に任意の名称を入力、「Server application」を選択して「Next >」をクリックします。

Screen Shot 2018-08-01 at 10.35.20

 

「Redirect URI」に認証後にリダイレクトされるURLを入力して「Add」をクリックし、最後に「Next >」をクリックします。その前にClient Identiferはメモしておきます(あとで使うので)。

Screen Shot 2018-08-01 at 10.36.07

 

「Generate a shared secret」をチェックします。生成されるshared secretをメモしておきます(あとで使うので)。

Screen Shot 2018-08-01 at 11.46.05

 

内容に問題ないことを確認して「Next >」をクリックします。

Screen Shot 2018-08-01 at 10.38.20

 

「Close」をクリックします。

Screen Shot 2018-08-01 at 10.38.35

 

これで完了です(๑•̀ㅂ•́)و✧

試してみましょう

以下のURLをブラウザのURL入力欄に以下のURLを入力してください。

https://[ADFSのFQDN]/adfs/oauth2/authorize/?client_id=[先程メモしたClient Identifer]&response_type=id_token&redirect_uri=https://contoso.com/&scope=openid&state=hoge&nonce=hoge

※stateとnonceは適当です(´・ω・`)

response_typeはOAuthでいうところのフローを選択する項目なのですが、ここではid_tokenつまりImplicit Flowを選択してます。

するとADFSの認証画面が表示されるので、認証してください。認証すると以下のURLにリダイレクトされます。

https://contoso.com/?client-request-id=[先程メモしたClient Identifer]#id_token=[IDトークン]&state=hoge

上記の[IDトークン]がOpenID ConnectのIDトークンです。これをSP側で適切に検証すれば、認証が行えます。

ペイロードの部分をみてみましょう。base64でエンコードされているのでデコードします。

{
"aud":"[先程メモしたClient Identifer]",
"iss":"https://[ADFSのFQDN]/adfs",
"iat":1533099776,
"exp":1533103376,
"auth_time":1533099776,
"nonce":"hoge",
"sub":"XXXXXX",
"upn":"user01@exapmle.com",
"unique_name":"DEV\user01"
}

upnにはActive DirectoryのUserPrincipalNameが入ってました。

最後に

激しく便利です。SAMLよりOpenID Connectの方が汎用性高いので、こっちのほうが使い勝手よさそうです。Azureの認証関連のサービスもOpenID Connectに対応しているものもたくさんあります。AzureのAPIゲートウェイであるAPI ManagementもOpenID Connetに対応してますし。ADFSで認証して発行されたOpenID ConnectのIDトークンをAPI Managementで検証して、その背後にあるAPIを呼び出すなんて、とっても便利な使い方だと思います(`・ω・´)シャキーン

ご覧いただきありがとうございます! この投稿は役に立ちましたか? 役に立った 役に立たなかった

Be the first to comment

コメント投稿

Your email address will not be published.


*