社内システムにシングルサインオン導入 その1

シングルサインオンとは

エクステックでは、社内システムとしてオープンソースのCRMを使用しております。今回、この社内システムに対して「シングルサインオン」を導入した手順についてご紹介したいと思います。

まずは前提知識として、シングルサインオンとはどういうものか、について簡単にご紹介。シングルサインオン(SSO: Single Sign-On)とは、ユーザーが一度の認証で複数のシステムやサービスにアクセスできる仕組みです。

シングルサインオンのメリット、デメリットをまとめてみました。

シングルサインオンのメリット

  1. システム利用者の利便性が向上する
    • 一度のログインで複数のサービスにアクセスが可能になる。
    • パスワード忘れやリセットの手間、リスクが減る。
  2. セキュリティが向上する
    • パスワードの使い回しが減る。
    • セキュリティポリシーを集中管理しやすくなる。

シングルサインオンのデメリット

  1. リスクが集中する
    • 認証サーバーが落ちると、すべてのサービスにログインできなくなる。
    • SSOアカウントが乗っ取られると、全サービスが乗っ取られる。
  2. 導入・構築コストがかかる
    • SSO基盤の設計・構築には一定の知識とコストがかかる。
    • 古いシステムや独自認証があるサービスはSSO対応が難しい場合がある。

SSOには、このようにメリットデメリットがあります。デメリットに着目すると、SSOの導入はリスクが多いように見えますが、社内で複数のシステムを使用しており、外部からのアクセスを保護しているような企業にとっては、メリットの方がとても魅力的に映ります。

SSOの主な基盤要素

次に、SSOの構築のための、主要な基盤要素(構成技術)を挙げてみます。

  1. IdP(Identity Provider):ユーザーの認証を行い、トークンを発行する中心的な存在
    例)Azure AD、Okta、Keycloak 等
  2. SP(Service Provider):認証を受けるアプリケーション側の仕組み
  3. プロトコル(認証・認可方式):IdPとSP間で通信する共通のプロトコル
    例)SAML 2.0、OpenID Connect (OIDC)、OAuth 2.0 等
  4. ディレクトリサービス(ユーザーストア)
    例)Microsoft Active Directory、LDAPサーバー(OpenLDAP など) 等

他にもありますが、主要なものといえばこれぐらいでしょうか。全体の関係、流れはこんな感じです。

SSOの全体構成と流れ
ユーザー
  ↓
SSOポータル / SP
  ↓
(未認証時 / 認証済の場合はアプリ利用開始)
  ↓
IdP(Identity Provider)
  ↓
ユーザーストア
  ↓
トークン発行
  ↓
SPで認証成功
  ↓
アプリ利用開始

ここまで理解できれば、この構成要素をひとつづつつぶしていく(検討する)作業になります。

エクステックの社内システム

エクステックでは社内販売管理システムとして、オープンソースのCRMをカスタマイズして使用しています。ただ、元となったオープンソースのCRMはSSOに対応していないため、SSO用のカスタマイズが必要になってきます。

販売管理システムの構成はこんな感じです。

インフラ:AWS EC2
Webサーバー:nginx
言語:PHP

目標:Entra ID(Azure AD)との統合で、ユーザーがEntra IDで認証されるようにしたい。

先述のIdP、ディレクトリサービスとして、いくつかの候補があります。
エクステックではすでにMicrosoft365を利用しており、Entra ID(Azure AD)をそのまま利用する事で、「ディレクトリサービス」と「IdP」が両方賄えるため、今回は一番シンプルな構成としてEntra IDによるSSOの実現を目指す事にしました。(オンプレでADを構築していれば、Azure AD Connectというサービスを使用してAzure ADと同期する、もしくはIdPを他社製(Oktaなど)にするといった構成も考えられたかもしれません。)

さて、ここまでがSSO構築の事前知識になります。次回は実際に行った、具体的な構築手順について記載していきたいと思います。