こんにちは、サイオステクノロジー技術部 武井です。マイクロソフト社が提供するシングルサインオンのシステム「Active Directory Federation System」(以降、ADFS)が、OpenID Connectのプロバイダーになるんです。これが激しく便利でしたので、その設定方法を記載しますヮ(゚д゚)ォ!
OpenID Connectの詳細につきましては、本ブログの以下の記事をご覧ください。
設定してみましょう
ADFSの管理画面にアクセスします。「Application Group」を右クリックして、「Add Application Group…」をクリックします。
「Name」に任意の名称を入力、「Server application」を選択して「Next >」をクリックします。
「Redirect URI」に認証後にリダイレクトされるURLを入力して「Add」をクリックし、最後に「Next >」をクリックします。その前にClient Identiferはメモしておきます(あとで使うので)。
「Generate a shared secret」をチェックします。生成されるshared secretをメモしておきます(あとで使うので)。
内容に問題ないことを確認して「Next >」をクリックします。
「Close」をクリックします。
これで完了です(๑•̀ㅂ•́)و✧
試してみましょう
以下の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を呼び出すなんて、とっても便利な使い方だと思います(`・ω・´)シャキーン