DX

簡単5ステップでSAMLのIdPサーバを構築してみた!

こんにちは。AMBLのクラウドネイティブ第1事業部 Webアプリケーション開発部の萱沼です。

好きな色は黄色です。

今回、SAML認証の実装をする機会があり、ローカルで検証を行うためのIdPサーバを構築しました。

いろいろなOSSのIdPサーバがありますが、私自身がGo言語の学習をしており、Go言語のIdPサーバの中でも導入ハードルが低いlite-idpを利用しました。

リポジトリのREADMEを参考にして、dockerを用いて環境構築しました。READMEの手順だと分かりづらい点がいくつかありましたので、その点を含めて記載します。

今回の記事では、IdPのログイン画面が立ち上がるまで構築します。

この記事は下記の方におすすめです

・ローカル環境でIdPサーバを構築したい

・Go言語の実行環境をPCに構築済みの方

・Go言語を利用したことがある方

・Webアプリを実装したことがある方

検証環境:

PC:MacBook Pro Apple M1 Pro

メモリ:16GB

Go:1.22.0

前提条件:

Go言語をローカル環境にインストール済み

Docker CLI等のdocker環境を構築済み

lite-idpをPCにクローン済み

opensslコマンドをインストール済み

node、npmをインストール済み

makeコマンドインストール済み

環境構築手順

1.PATHの確認

PATHを確認して、GOPATH配下のbinディレクトリが設定されているか確認します。


$ echo $PATH // Macの場合、/User/username/go/binが含まれているか確認をする

設定されていない場合、.zshrcなどにPATHを設定します。

$ vi ~/.zshrc

// 下記をどこかに記載する

export PATH=$PATH:$(go env GOPATH)/bin

2.鍵生成を行う

クローンしてきたディレクトリに移動して、makeコマンドで鍵を生成します。

$ cd lite-idp/hack

$ make

3.UIをビルドする

クローンしてきたディレクトリに移動し、シェルを実行してUIをビルドします。

$ cd lite-idp/hack/ui

$ ./build-ui.sh

4.Docker Composeファイルの作成

docker-compose.ymlをリポジトリのディレクトリ直下に作成します。

下記のように記載します。

下記は例になりますので、ご自身が構築したい環境に合わせてパラメータを変更してください。

services:

  saml:

    container_name: saml-idp

    build:

      context: .

      dockerfile: Dockerfile

    ports:

      - "9443:9443"

    environment:

      - TZ=Asia/Tokyo

    volumes:

      - ./config.yaml:/etc/lite-idp/config.yaml:ro

      - ./hack/tls-setup/certs:/hack/tls-setup/certs:ro

5.Dockerの起動

Dockerfileのビルドとコンテナの起動を行います。

$ docker compose up --build

起動したらプロセスの確認を実施します。

下記のようになっていれば、起動完了です。

docker compose ps

NAME       IMAGE           COMMAND            SERVICE   CREATED         STATUS         PORTS

saml-idp   lite-idp-saml   "lite-idp serve"   saml      3 seconds ago   Up 3 seconds 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp

https://localhost:9443/ui/login.html

にアクセスをしてみましょう!

以下のようなページが表示されればOKです。

いかがでしたでしょうか。

簡単にIdPサーバを構築することができました。

ローカルでの検証が必要な際は、参考にしていただければと思います!

lite-idp以外にも機能が充実しているKeycloak、node.jsでコーディングされているsaml-idpがありますので要件に合わせて選択してみても良いと思います。

次回はIdPサーバの設定手順の記事を公開できればと考えていますので、お楽しみに!