ユーザー認証(1)
はじめに
こんにちは、No.5です。
今回はユーザー認証についての記事となります。
さまざまなサービスを利用する際に、ユーザー登録を行うことが多いと思います。サービスへのログインでユーザーを認証する際にどのような処理が行われているか意識したことはあるでしょうか?
今日も何度かユーザー認証を行ったのではないかと思いますが、そのような身近なユーザー認証について取り上げていきます。
ユーザー認証とは
ユーザー認証とは、あらかじめ登録されているユーザーの情報をもとに、本人かどうかを識別する行為のことです。
ユーザー認証には、コンピューターを利用するときにユーザー名とパスワードを知っていること用いた方法、IDカードなどを所有していることを用いた方法や、顔や指紋など身体の特徴を用いた方法などが含まれます。
認証と認可
認証とあわせて認可という用語が使用されることがありますが、両者は性質が異なるものです。
例えば、ログインするユーザーが正しいユーザーかどうかを確認するのが認証で、ログインしたユーザーが操作することができるデータの権限を付与することが認可となります。
認証(Authentication)
利用者本人の確認を行うこと
認可(Authorization)
利用者に正しい権限を与えること
シングルサインオン
また、シングルサインオン(SSO:Single Sign-On)という用語が使用されることもあります。
SSOとは、IDとパスワードを一度入力するだけで複数のサービスにログインして利用できる仕組みです。一度認証を受ければ、別のサービスを利用する場合に再度入力する必要がなくなります。
ユーザー認証の種類
様々な認証の種類がありますが、今回は次の項目について解説していきます。
Active Directory認証
SAML認証
統合Windows認証
多要素認証
Active Directory認証
Active Directory(AD)とは、組織内のユーザー、グループやコンピューターなどを一元管理する機能を含むサービスの集合体です。
Windows ServerやAzure Active Directoryというクラウドサービスでも提供されています。
Active Directoryの機能
Active Directoryが提供する主な機能は次のとおりです。
Active Directory ドメインサービス(AD DS)
ユーザー、グループやコンピューターなどのネットワーク上のオブジェクトに関する情報(ディレクトリ情報)を管理したり、検索したりすることができる機能
Active Directory フェデレーションサービス(AD FS)
AD DSに登録したディレクトリ情報を用いてSSOを行うための機能。SAML認証で使用する
Active Directory 証明書サービス(AD CS)
証明書を発行したり管理したりする機能
AD DS、AD CS、AD FSを含むActive Directoryの全体イメージは次のとおりです。
Active Directory認証とは、このActive DirectoryのAD DSを用いて、コンピューターやサービスへログインするユーザーが登録されたものと一致するかどうかを確認することを指します。
弊社が提供しているinvoiceAgent 文書管理(以下、iA文書管理)では、Active Directoryのディレクトリに登録されているユーザーやグループの情報をiA文書管理に同期してユーザー認証で利用します。
iA文書管理のみでユーザーやグループを管理することもできますが、組織の規模が大きくなると組織改編のたびに手動で変更することになってしまいます。
そこで、社内で利用しているActive Directoryを参照することにより、組織改編でディレクトリ情報が更新されれば、それに応じてiA文書管理における情報も同期できるようになり、情報を手動で更新する手間が省けます。
SAML認証
SAML(Security Assertion Markup Language)とは、OASISによって策定された異なるインターネットドメイン間でのユーザー認証を実現するXMLベースの標準規格です。[1]
SAML認証とは、SSOの手法の1つであり、ユーザーの認証情報、属性、権限といった情報をSAML形式のデータとしてやりとりすることによって実現する認証のことを指します。
認証情報を提供する側をIdentity Provider(IdP)と呼び、認証情報を利用する側(アプリケーションサービス側)をService Provider (SP)と呼びます。
IdPとしては、Active Directory(AD FS)、OpenAM、OneLogin、Salesforceなどがあります。
認証フローには、SP起点のフローとIdP起点のフローの2種類があり、それぞれSP initiated SSO、IdP initiated SSOと呼びます。
SP initiated SSO
ユーザーがSPにアクセスすると、SPはそのリクエストをSAML認証要求と共に、IdPへとリダイレクトします。IdPはこの認証要求に基づき、ユーザーの認証処理を実行します。IdPでのユーザー認証が成功すると、IdPはSPに対して認証情報やユーザーの属性等の情報を発行します。これらの情報を「アサーション」と呼び、SPはこのアサーションを元にアクセス制御を行います。両者の間ではパスワードのやり取りが行われないため、高いセキュリティが確保されます。[1]
iA文書管理では、このSP initiated SSOのSAML認証に対応しています。
IdP initiated SSO
IdPを起点とした場合、ユーザーはまずIdPで認証され、次にIdPに対して SPの利用を要求します。IdPはSPにアクセスするための情報(SAMLアサーション)を作成し、ユーザー(Webブラウザー)に渡します。ユーザー(Webブラウザー)は、受け取った 情報をSPに渡します。SPは受け取った情報の内容を確認し、ユーザーにサービスの利用を許可します。[1]
SAML認証ではユーザーのWebブラウザーを通してSAML形式のデータがやりとりされるのですが、そのデータを観察する方法があります。
Google Chromeの場合「SAML-tracer」という拡張機能を使用することで、次のように通信ごとのSAMLデータが表示されます。[2]
なお、SAML認証をJavaプログラムで実現する場合、java-samlというOSSを利用することができます。
https://github.com/SAML-Toolkits/java-saml
統合Windows認証
統合Windows認証(IWA:Integrated Windows Authentication)とは、SSOの手法の1つであり、あらかじめSPにActive Directoryのドメインユーザーと同じログインIDを持つユーザーを登録しておくことで、クライアントPCからSPにアクセスする際に、現在WindowsにログオンしているActive Directoryのドメインユーザーで自動的にログインできます。[3]
クライアントPCのOSがWindowsの場合に利用できます。
構築方法には、IIS(Internet Information Services)を使用する方法としない方法があり、iA文書管理ではその両方に対応しています。[4]
IISを使用する方法
IISへ、NegotiateまたはNTLMで認証します(Active Directoryとの通信も発生します)
認証されたユーザーIDがiA文書管理に共有されます(Apache JServ Protocol)
Active Directoryに対してユーザーを取得し、iA文書管理へ情報を返します
iA文書管理からIISへ認証結果を返します
IISからユーザーへ認証結果を返し、認証が完了します
IISを使用しない方法
invoiceAgent 文書管理へ、NegotiateまたはNTLMで認証します(Active Directoryとの通信も発生します)
統合Windows認証で認証されたユーザーIDを基に、Active Directoryに対してユーザーを取得し、iA文書管理へ情報を返します
iA文書管理からユーザーへ認証結果を返し、認証が完了します
統合Windows認証を使用して自動ログインするためには、Webブラウザーの統合Windows認証設定(SPNEGO認証)を有効にする必要があります。
この設定を行わないと、ログイン時にユーザー名とパスワードを入力させるダイアログが表示されます。
Webブラウザーごとの設定方法は次の資料を参照してください。
なお、統合Windows認証をJavaプログラムで実現する場合、WaffleというOSSを利用することができます。
https://github.com/Waffle/waffle
多要素認証
多要素認証(MFA:Multi-Factor Authentication)とは、認証の3要素である「知識情報」「所持情報」「生体情報」のうち、2つ以上を組み合わせて認証することを指します。[5]
多要素認証を導入すると、例えば知識情報のID・パスワードが漏洩したとしても所有情報や生体情報の認証が必要になるため、不正ログインの防止効果が高まり、セキュリティが強化されます。
2段階認証との違い
多要素認証の中でも、2要素を使う認証のことを「2要素認証」と呼びますが、これに似た言葉として、「2段階認証」と呼ばれる認証方式も存在します。この2つは、共に認証を2回行うという点では同じですが、2要素認証を実現するためには、認証の3要素のうち2要素を利用する必要があります。
例えば、ID・パスワードという知識情報による認証の後に、「秘密の質問への回答」という知識情報による認証を行う場合は、認証を2回行っていますが知識情報のみの1要素になるため、2段階認証です。2段階認証よりも2要素認証の方がより安全と言えます。[5]
iA文書管理でも多要素認証に対応しており、管理者がユーザーに設定を義務づけることもできます。
まとめ
Active Directory認証
Active DirectoryのAD DSを用いて、コンピューターやサービスへログインするユーザーが登録されたものと一致するかどうかを確認する認証のこと
SAML認証
SSOの手法の1つであり、ユーザーの認証情報、属性、権限といった情報をSAML形式のデータとしてIdPとSP間でやりとりすることによって実現する認証のこと
統合Windows認証
SSOの手法の1つであり、現在WindowsにログオンしているActive Directoryのドメインユーザーで自動的にSPにログインする認証のこと
多要素認証
認証の3要素である「知識情報」「所持情報」「生体情報」のうち、2つ以上を組み合わせて認証すること
いかがでしたか?
ユーザー認証には様々な種類があり、それぞれ異なる特徴を持っていることが理解いただけたでしょうか?
今回ご紹介したユーザー認証について詳しく知りたい方は、参考文献を参照してみてください。
参考文献
[1] CYBERNET. "SAMLとは"
[2] SAML-tracer
https://chrome.google.com/webstore/detail/saml-tracer/mpdajninpobndbfcldcmbpnnbhibjmch?hl=ja
[3] desknet's NEO. "統合Windows認証によるシングルサインオン"
[4] invoice Agent 文書管理 製品ガイド
https://cs.wingarc.com/manual/ia/doc/10.10/ja/1380867.html
[5] NRI. "多要素認証"