AzureADをIdPにしてGoogle WSとSAML連携する

AzureADをIdPとしてGoogle WSとSAML連携をしようと思って設定をしました。SAML連携なので特に問題ないと思って設定しましたが、ちょっとだけつまづいたのでメモとして残しておきます。また、主だった設定の流れは検索すればすぐに情報が出てくるので割愛します。

SSO連携設定

AzureADの管理コンソールの「エンタープライスアプリケーション」から「Google Cloud / G Suite Connector by Microsoft」を検索して追加します。プラグインの追加を求められるのですが、一般的なSAML連携なので「プラグインって必要なの?」と思いつつ、追加しておきます。実はこれがワナでした。

ポイント①:識別子(エンティティID)の設定

SAMLの詳細な設定にて、識別子(エンティティID)は以下を設定してください。
・https://google.com/a/ your-domain
・https://google.com
・google.com/a/your-domain
・google.com

この設定に間違いや不足があると、SSOログイン時に以下のエラーが発生します。

ポイント②:送信属性はNameIDのみ

プラグインを追加した関係で「送信属性とクレーム」の「追加の要求」に余計な属性が追加されています。これがワナでして、Google WSとのSSO連携では「一意のユーザー識別子 (名前 ID)」(NameID)のみ設定すればOKです。余計な設定をしているとSSOログイン時に以下のエラーが発生します。

SAML Responseに不要な属性があっても無視するSPが多いなか、Googleさんは厳密にチェックしているようです。そのため、不要な属性をSAML Responseに含めないようにしてください。必要な「送信属性とクレーム」は「一意のユーザー識別子 (名前 ID)」だけです。

—2022年11月追記—
根本的な原因は「Attribute」に2バイト文字(姓名)が含まれているからでした。日本の場合、姓名に2バイト文字は含まれると思いますよ!ということで認証には不要なので「ユーザー識別子」だけでいいですね。

ちなみに、「一意のユーザー識別子 (名前 ID)」にはUPN以外にカスタム属性なども設定できますので、UPNとは全く別の値も利用できます。AzureADアカウントのUPNが「test001@test.com」だけど、Google WSのアカウントは「Hideo@kojipro.jp」とか、結構こんなケースは多いのでは。。。

ポイント③:ログアウトURLはちょっと違うよ

Google WS側のSSO設定画面にある「ログアウトURL」の設定ですが、AzureAD側に表示される「https://login.microsoftonline.com/xxxx/saml2」だとうまくいきません。以下のURLを設定してください。

・https://login.windows.net/common/wsfederation?wa=wsignout1.0

まとめ

ということで「つまづきポイント」をメモっておきました。Googleのプラグインって何なんでしょうね?自動IDプロビジョニングとか、その辺の機能を使うための設定が省力化できるってことかな。。。

【参考:チュートリアル:Azure Active Directory シングル サインオン (SSO) と Google Cloud (G Suite) Connector の統合】
https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/google-apps-tutorial

Set-AzureADUserExtension で AzureADのカスタム属性に値をセットする&確認する方法

AzureAD側で用意されているカスタム属性「extensionattribute1~15」に値をセットしたくて調べていましたが、あまり情報がないのでまとめておきます。特にセットした値をPowerShellで確認する方法が見当たらないなくて、いろいろ試したけど結局、「Microsoft Graph Explore」から確認することになりました。詳しくは記事を読み進めていただければと思います。

extensionattributeに値をセットする

カスタム属性に値をセットするためには「Set-AzureADUserExtension」コマンドを利用します。このコマンドを利用するために「Windows PowerShell SE」から「Install-Module AzureAD」コマンドでモジュールをインポートしてください。詳細はこちらの記事を参照していただければと思います。

①「Connect-AzureAD」コマンドでAzureADに接続
②「Get-AzureADUser -SearchString “検索文字列” | Select-Object *」で「ObjectID」を調査
③「Set-AzureADUserExtension -ObjectId xxxxx -ExtensionName extensionattribute5 -ExtensionValue “値”」

②では「Select-Object *」なのでたくさん情報が表示されると思いますが、最初のほうに「ObjectID」が表示されていると思います。③のコマンドではカスタム属性「extensionattribute5」に値をセットしています(なんとなく5番に値を入れてみました)。コマンドの実行結果は(成功、エラーなど)何も表示されません。ということで「ちゃんと値がセットされているか?」を確認したいと思います。

extensionattributeにセットした値を確認する

簡単なPowerShellコマンドから確認できると思っていましたができませんでした(ご存じの方、教えてください)。「Get-AzureADUser -ObjectId xxxxx | Select-Object -ExpandProperty ExtensionProperty」コマンドで確認できそうだったのですが、独自で追加した拡張属性の値は表示されるけど用意されている「extensionattribute」は表示できませんでした。何でやねん!?ということで「Microsoft Graph Explore」を使って「Graph API」を利用して確認します。最初はスクリプト作ろうかと思いましたが「Microsoft Graph Explore」はブラウザから利用でき、ソフトウェアのインストールなどはないので手軽に使えます。ということで、これでいきます。

Microsoft Graph Exploreから値を確認する

まずは「Microsoft Graph Explore」のサイトにアクセスしてAzureADの管理者アカウントでログインしてください。ログインすると「Graph API」を実行することができます。

Microsoft Graph Explorer URLhttps://developer.microsoft.com/ja-jp/graph/graph-explorer

①AzureADの管理者アカウントでログインしてください。
②デフォルト(GET / v1.0)でOKです。
③「Graph API」コマンド(URL)を入力します。「extensionattribute」を取得するURLは以下です。
  https://graph.microsoft.com/v1.0/users/ObjectIDの値?$select=onPremisesExtensionAttributes
④クエリ(入力したコマンド)を実行します。

まとめ

「extensionattribute1~15」は「AzureAD Connect」を利用するとオンプレミスの「Active Directory」から同期できる属性でもあります。「Graph API」のクエリにも「onPremisesExtensionAttributes」とあるので”オンプレAD向けのカスタム属性”という意味が強いのかなと思っています。

ちなみにこの「extensionattribute1~15」は、SAML Responseの「NameID」や「Attribute」に利用することができます。

それにしてもPowerShellから簡単に確認できればよかったのですが・・・。
The onPremisesExtensionAttributes is a property just for the User object in Microsoft Graph.you could not get it with command like Get-AzureADUser.onPremisesExtensionAttributesはMicrosoftGraphのUserオブジェクト専用のプロパティです。Get-AzureADUserのようなコマンドでは取得できません。)」という記述も見かけたので、PowerShellからは呼び出せないようですね。