【SAML認証】SimpleSAMLphpを試す(Google Workspace編)
SimpleSAMLphpをSP、Google WorkspaceをIDPとしてSAML認証したい!
概要
今回の記事では、SimpleSAMLphpをSP、Google WorkspaceをIDPとしてSAML認証する手順を掲載する。
無料のGmailアカウントではSAML認証をできないので注意。
SimpleSAMLphpのインストールする手順は下記の記事に載せてる。
仕様書
環境
- Ubuntu 20.04.4 LTS
- Apache 2.4.41
- PHP 8.0.30
- SimpleSAMLphp 2.1.1
手順書
- SimpleSAMLphpのインストールする手順は下記の記事のような感じで済ませておく。
- Google Workspaceの管理者アカウントにログインしてる状態で
[https://admin.google.com/](https://admin.google.com/)
にアクセスする。 - 左のメニューの「アプリ」->「ウェブアプリとモバイルアプリ」を開いて、「アプリの追加」をクリックする。
- 「カスタムSAMLアプリを追加」をクリックする。
- 「アプリ名」を入力して、「続行」をクリックする。
- 「メタデータをダウンロード」をクリックして、
google-workspace.xml
をダウンロードする。このxmlファイルは後ほどSimpleSAMLphpで使う。「続行」をクリックする。後ほど、また戻ってこちらでも設定をするのでページは閉じないでおく。
- SimpleSAMLphpの管理画面にアクセスする。「連携」を開き、「ツール」の中にある「XMLをSimpleSAMLphpメタデータに変換」をクリックする。
- 「~ or select a file」をクリックして、先ほどダウンロードした
google-workspace.xml
を選択する。「パース」をクリックする。
- 下に「変換されたメタデータ」が表示されるので、内容を全てコピーする。右上のアイコンをクリックしてもコピーできる。
/var/www/simplesamlphp/metadata/saml20-idp-remote.php
に先ほどコピーした内容を丸ごとペーストする。<?php // 以下にコピペする(一部抜粋 $metadata['https://accounts.google.com/o/saml2?idpid=XXXXXXXXX'] = [ 'entityid' => 'https://accounts.google.com/o/saml2?idpid=XXXXXXXXX', 'contacts' => [], 'metadata-set' => 'saml20-idp-remote', 'SingleSignOnService' => [ [ 'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Location' => 'https://accounts.google.com/o/saml2/idp?idpid=XXXXXXXXX', ], [ 'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', 'Location' => 'https://accounts.google.com/o/saml2/idp?idpid=XXXXXXXXX', ], ], ... ];
entityid
のhttps://accounts.google.com/o/saml2?idpid=XXXXXXXXX
という感じの値は次の手順で使うのでコピーしておく。/var/www/simplesamlphp/config/authsources.php
を開き、Google Workspace用の設定を追加する。'google-workspace' => [ 'saml:SP', 'entityID' => 'https://example.com/simplesamlphp/', 'idp' => 'https://accounts.google.com/o/saml2?idpid=XXXXXXXXX', 'discoURL' => null, 'name' => [ 'en' => 'A service', 'no' => 'En tjeneste', ], 'attributes' => [ 'email' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', ], 'attributes.required' => [ 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', ], ],
entityID
の値は、Google Workspace側の設定でも使う共通のユニークIDになるので覚えておく。記事中ではURL形式にしてるが、URL形式でなくても良い。
'idp'の値は、先程コピーしたsaml20-idp-remote.php
のentityid
の値を入力する。- 再びSimpleSAMLphpの管理画面の「連携」を開くと「Hosted entities」の中に先ほど入力した
entityid
の値の項目が増えてるので折りたたみを開く。
この中にmd:AssertionConsumerService
というタグがあるので、その中にある属性Location
の値をGoogle Workspaceで使うのでこちらも覚えておく。 - Google Workspaceの設定画面に戻る。
「ACRのURL」にmd:AssertionConsumerService
のLocation
の値を入力する。https://example.com/simplesamlphp/public/module.php/saml/sp/saml2-acs.php/google-workspace
のような感じ。
エンティティIDには/var/www/simplesamlphp/config/authsources.php
のentityID
の値を入力する。この記事の例ではhttps://example.com/simplesamlphp/
となる。
「名前IDの形式」は「UNSPECIFID」を選択する。
「名前ID」は「Basic Information > Primary email」を選択する。
「続行」をクリックする。 - 次のページが表示される。今回の場合は特に設定は不要なので「完了」をクリックする。
- デフォルトでは誰もSAML認証できない設定になってるので、認証できるよう設定する。
「ユーザーアクセス」の中にある「詳細を表示」をクリックする。 - 「サービスのステータス」の中にある「オン(すべてのユーザー)」にチェックを入れて「保存」をクリックする。この画面から「グループ」や「組織部門」毎にアクセスの設定をできる。今回は契約に含まれるアカウント(全グループ、全組織部門)がアクセスできる設定にした。
- 「SAMLログインをテスト」をクリックしてSimpleSAMLphpをインストールしてるサーバー(何も設定をしなければ
example.com
のトップページ)が表示されればSAML認証に成功してる。
- SimpleSAMLphpからもテストする。管理画面にログインして「Test」を開き、「Test Authentication Sources」の中にある「google-workspace(/var/www/simplesamlphp/config/authsources.php`に入力した名前が表示される)」をクリックする。
- 下図のように「email」と「NameId」にGoogle Workspaceのメールアドレスが表示されてれば、正常にSAML認証できてる。
お疲れさまでした。
まとめ(感想文)
手順が長い!
テストが上手くいかない場合は、下記をチェックしてみる。(自分が手探りで設定してた時にここらへんを間違えてた)
- Google Workspace側の設定で「ACRのURL」が正しいか?(simpleSAMLphpの「連携」の「Hosted entities」の
md:AssertionConsumerService
のLocation
の値) - Google Workspace側の「エンティティID」とsimpleSAMLphpの
/var/www/simplesamlphp/config/authsources.php
のentityID
に同じ値が入力されてるか?
次は「Microsoft Entra」でSAML認証してみるよ!