OktaとMicrosoft365をSSO連携してみた

はじめに

Okta社の年次調査レポート「Businesses at Work 2021(https://www.okta.com/businesses-at-work/2021)」によると、2020年にOkta経由で利用されたSaaSは、断トツで”Microsoft365”がトップとなっています。”1番利用されているなら、これはやるしかない”ということで実際に連携してみました。

OktaとMicrosoft365を実際に連携してみたところ、SSO連携方式が“SAML”ではなく“WS-Federation”だったこと、“Immutable ID”という属性が連携に必要だったことなど、他SaaSとの相違点を発見することが出来ました。
本ブログでは、実際の連携で苦労したことや学んだことをまとめています。OktaとMicrosoft365をSSO連携する際のご参考にして頂けますと幸いです。

WS-Federationとは?

SalesforceやBox、DocuSignといった多くのSaaSを、Oktaを代表とするIDaaSとSSO連携する際は、通常SAMLやOpenID Connectといった標準プロトコルを用います。OpenID Connectは比較的最近作られたということもあり、現状はSAMLを用いてのSSO連携が主流となっています。
しかし、IDaaS(Okta)とMicrosoft365をSSO連携する際は、” WS-Federation”プロトコルを用います。
WS-Federationとは、SAMLと同様にセキュリティ・トークン・サービス(STS)を利用し、SSOを実現しています。Oktaにおいても、Microsoft365とSSO連携する際は、このWS-Federationを用いて連携します。聞きなれない” WS-federation”しか選択出来ず戸惑うかもしれませんが、基本的にはSAMLと同義と考えて問題ありません。
なお、WS-Federationの詳細は、Microsoftの公式サイトに記載がありますので、下記よりご確認ください。
https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/bb498017(v=msdn.10)?redirectedfrom=MSDN

Immutable IDとは?

OktaとSaaSをSAMLを用いてSSO連携する場合、基本的にはSaaS側のユーザ名のみを属性に設定することで、Okta経由でSaaSへパスワードを用いずにログイン可能です。しかし、Microsoft365の場合はMicrosoft365側のユーザ名に加えて、” Immutable ID”という属性が必須になります。

<Boxにおける必須設定値(ユーザ名のみ)>

< Microsoft365 における必須設定値(ユーザ名+ Immutable ID)>

Immutable IDとは、IDaaS(Okta)側のユーザとMicrosoft365(Azure AD)側のユーザを一意に識別及び紐づけるために使用される属性となります。

Immutable IDは、sourceAnchor属性とも呼ばれており、詳細はMicrosoftの公式サイトに記載がありますので、下記よりご確認ください。
https://docs.microsoft.com/en-us/azure/active-directory/hybrid/plan-connect-design-concepts

Immutable IDの確認及び設定方法

PowerShellにてMicrosoft365へ接続し、以下コマンドを実行することでMicrosoft365 上のユーザへ付与されたImmutable IDを確認出来ます。

<Immutable ID確認コマンド>

Get-MsolUser –UserPrincipalName <アカウントアドレス> | Select-Object ImmutableID

< Immutable ID確認コマンド実行結果>

Microsoft365上でユーザを手動にて作成した場合、Immutable IDは付与されないため、PowerShellにてMicrosoft365へ接続の上で以下コマンドを実行することで、該当ユーザへImmutable ID付与が可能です。

<Immutable ID付与コマンド>

Set-MsolUser –UserPrincipalName <アカウントアドレス> -ImmutableID <連携用ユニークID>

< Immutable ID付与コマンド実行結果>

Immutable IDは、Microsoft365ユーザ毎に一意な値であればよく、メールアドレスと一緒の値を付与することも出来ます。

プロビジョニング機能を用いてOktaからImmutable ID付与

OktaとMicrosoft365をSSO連携した際に登録したカスタムドメインは、フェデレーションドメインとなります。フェデレーションドメインのままでは、Microsoft365上から新規ユーザを作成することができず、仕様上の課題があります。
対処の一例として、以下コマンドを実行することで対象ドメインのフェデレーション状態を解除でき、Microsoft365上で新規ユーザを作成することが可能です。

<フェデレーションドメイン解除コマンド>

Set-MsolDomainAuthentication -Authentication Managed -DomainName <対象ドメイン>

<フェデレーションドメイン解除コマンド実行結果>

対象ドメインをManaged(通常ドメイン)へ変換しており、ドメインの状態は、コマンド” Get-MsolDomain”で確認可能 です。

フェデレーションドメインへ再設定する場合は、Okta管理者画面のMicrosoft365設定画面のSign Onタブにて再保存(設定変更無しの編集→保存)が可能です。

しかし、上記手法では新規ユーザ作成の度にフェデレーションドメインの解除及びImmutable ID付与が必要となり、ユーザ管理が煩雑かつ運用工数・コストが発生してしまいます。

そのため、「プロビジョニング機能」の使用を推奨します。フェデレーションドメインの解除が不要となり、Oktaでユーザ作成するだけ、Microsoft365上へ紐づくユーザにImmutable IDが付与できるからです。
※プロビジョニング機能については、Lifecycle Management(LCM)ライセンスが必要となりますのでご注意ください。

OktaとMicrosoft365のプロビジョニング機能に関しては、Okta管理者画面のMicrosoft365設定画面のProvisioningタブから実施可能です。

<プロビジョニング設定画面>

付与するImmutable IDは、Directory > Profile EditorのOktaからMicrosoft365へのマッピングルールにて設定可能です。

< Immutable ID マッピング設定画面>

Immutable IDは、デフォルトで下記のように設定されています。

<OktaからMicrosoft365へのデフォルトのImmutable ID設定内容 >

hasDirectoryUser()?findDirectoryUser().externalId:null

Okta上のユーザがActive Directoryと同期がある場合、Active Directory上の全てのオブジェクトに対して付与されるIDのGUID(128bitのランダムな値)、同期がない場合、NULL(長さ0の空文字列)が設定されます。

なお、Okta側でユーザ作成した場合はNULLとなりますが、プロビジョニング機能を用いてOktaからMicrosoft365へ新規ユーザ作成もしくはMicrosoft365側の既存ユーザへImmutable IDを付与する際は、Immutable IDにはランダムな値が自動で付与されます。

一度Immutable IDが設定された場合は上書きが出来ないので注意が必要です。元のImmutable IDの値と異なる値で上書きを実行した場合は、元のImmutable IDがOkta上に保持される動きになります。

まとめ

本ブログでは、OktaとMicrosoft365のSSO連携時に用いる“WS-Federation”プロトコル、“Immutable ID”、更にはプロビジョニング連携の必要性についてご紹介しました。

Okta とMicrosoft365のSSO連携自体は、いくつかのボタンをクリックするだけで実現できますが、詳細部分に関してはわかりづらい部分があると感じています。私自身、連携に苦労した部分があり、同じようにお悩みの方が本ブログを読んで解決することを切に願っています。

OktaとMicrosoft365の連携に関してご興味のある方は、是非一度マクニカにご相談ください。

お問い合わせ・資料請求

株式会社マクニカ  Okta 担当

月~金 8:45~17:30