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

boxのログインIDの変更について

boxではメールアドレスがログインID(ユーザID)となりますが、変更したい場合があると思います。

ユーザ自身でログインIDを変更する

手順としては、以下になります。

①ユーザ自身で設定画面より「メールアドレスを追加」
②確認メールが飛ぶのでメールを確認
③登録したメールアドレスが「アクティブ」状態になったあとに表示される「プライマリに変更」をクリック

画面上部のユーザアイコンから「アカウント設定」を開くと「ログインとメールアドレス」欄で確認できます。

 

管理者で変更できるの?

boxの管理画面では以下のようになっており、メールアドレスの追加は画面上ではできませんでした。

メーアドレス(管理画面上は「その他のメール」)の管理者による追加は、APIを利用すれば登録はできましたが、登録したメールアドレスをログインIDに変更(プライマリに変更)することもbox管理画面からはできないようです(変更するようなボタンが無い)。これもAPIを利用すれば出来るはずです(実際、試してはないですがユーザのUpdateで実施するのだと思います)。

【box API : Create email alias】
https://developer.box.com/reference/post-users-id-email-aliases/

【box API : Update user】
https://developer.box.com/reference/put-users-id/

 

以上、備忘録でした。

 

 

Office365とboxについて

案件で「Office365」と「box」の両方を利用するというお客様のご支援をしてますが、ユーザの利用環境がPC、スマートデバイスで、デバイスを固定したい、という要件がありました。そのため、クライアント証明書を利用したアクセス制御を実施しました。

その際、アプリとかOS標準機能でクライアント証明書が利用できるか否か調査をしたので情報を共有します。

 

 

最近のアプリはOAuthに対応しているものが多く、認証時には組み込みブラウザ(WebView)が起動します。ただ、そのブラウザが「クライアント証明書」を利用できるか?もっと言うと、OS領域に格納されている証明書にアクセスできるか?は実装に依存します。なので検証してみないと分からないというのが実情です。

boxはSSO設定を行っても、直接ログインとSSOでログインする中間の状態を保てるので、便利ですね。「完全SSOに移行」という設定を行うと全てIdPにリダイレクトされる動きになります。

Adobe Creative Cloud とのSAML連携・クライアント証明書認証の検証

ある案件にて、Adobe Creative Cloud とのフェデレーションを行う検証をしましたので、メモ。
それとクライアント証明書を利用して端末を固定して認証できるかも検証しました。

■IdPの設定
・EntityID: https://www.okta.com/saml2/service-provider/spxxxxxxxxxxxxx
・Assertion Consumer Service: https://adbe-xxxxxxx-dot-com-7890-prd.okta.com/auth/saml20/accauthlinktest
・NameIDPolicy: 「urn:oasis:names:tc:SAML:2.0:nameid-format:persistent」
・AdobeCC側でのユーザ識別は「Named ID」の値を利用する仕様
→「Named ID」にユーザ名を入れること。
・姓名も必須属性としているが、実際は利用されていない様子。
→念のため、送付するよう設定。姓:「FirstName」 名:「LastName」

※xxxは実際のものに設定してください。他にも個別情報部分は適当に変えています。
※AdobeCCの管理者コンソールから、メタデータがダウンロードできるので、それを見るのが良いです。

■Adobe CC側の設定
・IdP証明書: IdPの証明書をアップロード
・IdP発行者:IdPのEntityIDを登録
・IdPログインURL:IdPのログインURLを登録
・IdPバインディング: HTTP-REDIRECT
・ユーザーログイン設定: メールアドレス
→Named IDの値がメールアドレス形式かチェックする、という設定らしい。。。意味あるのか?

ユーザが一番最初にやることは、Adobe サイトへ行って、ログインして、PhotoShopとか、アプリケーションをダウンロードすることです。これはOS既定のブラウザからアクセスするので、証明書の利用はできます。が、その後、アプリケーションのインストール時に認証が求められますが、これはアプリ内に実装された「WebView」を利用しており、証明書認証ができませんでした(証明書を選ぶ画面がでないです)。

【アプリインストール時に起動するWebView画面】

なお、iPad/iPhoneの場合、アプリのダウンロードはApp Storeからとなります。

とりあえずID/Passで認証を行い、アプリをインストールすると、ランチャーみたいなアプリが入ります。既に認証済なので、ログイン状態ですが、敢えてログアウトして再度、ログインを試みました。やはりWebViewが起動するので、証明書は利用できませんでした。

【Adobe CCのランチャー画面】

また、アプリを起動するとログインできるメニューがありました。Office365でもExcelとかの画面右上に「サインイン」とかありますよね。それと同じ感じです。こちらはOS既定のブラウザが起動するので証明書を利用した認証ができました。

【各アプリからのログイン】

試しにAdobeCCのランチャーからではなく、Windowsのプログラムメニューからアプリケーションを起動してみました(Adobe CCのランチャーはログオフ状態)。すると、サインインしてくださいという画面が表示されますが、これもWebViewでしょうか・・・なんかデザインが今までのサインイン画面と違うのでもしかしたら・・・なんと!証明書が利用できました!

【アプリケーション直接起動】

 

という検証結果でした。アプリのインストール時に証明書が利用できれば、とりあえず端末を固定して(証明書を利用して)利用を開始させることができたのですが、残念ながら。

IdPでIPアドレス制御して、社内からしかログインできないようにして、ユーザは(証明書を利用した)VPN接続して利用する、という方法しか端末を固定することができないような気がします。

あと、iPad/iPhoneでは、証明書ストア(キーチェーン)へのアクセスはアプリからは出来ないようですので、そもそも証明書認証ができません。OS上にインストールされたブラウザ(Safariとか)なら当然ながら証明書の利用ができます。マイクロソフト社のAuthenticatorを利用すればできるかも知れませんが、それはアプリ側が呼び出してくれないとダメですからね。というか、完全にアプリの実装に依存しているので、WebViewもSafariベースのもので実装すればいいのでは無いでしょうか。

アプリ屋の方々と是非お話してみたいです。

Office365 アカウントの無効化について

Office365はアカウント自体を無効化状態にすることはできないようです。例えば、社員が退職したあと、しばらくアカウントを無効化しておきたいという場合、以下のような対応になると思います。

管理者コンソールから、「ユーザの編集」→「サインインの状態」から“サインインが禁止されている”に設定する。

注意点としては、アカウント自体は生きているのでメールは受信できます。この点がGoogleAppsと異なります。GoogleAppsはアカウントを無効に設定すると、メールは受信できません(User Unknownとなります)。

なので、PowerShellからSet-Mailboxの-AcceptMessagesOnlyFromdで受信可能なFromアドレスを指定できます。つまり、特定のメールアドレスだけ受信するような設定にします。

結構面倒ですな。GoogleAppsと同じような仕様だと、とっても分かりやすいのに。。。

Office365 PowerShell環境の構築方法

Office365をPowerShellで操作する環境を作る手順です。

***********************************************************************************************************
【2022年2月追記】
現在のWindows10/11ではモジュールのインストールは不要で、PowerShellを起動して必要なアドオンモジュールをImportするだけでMS365への操作などができます。詳しくはこちらの記事を参照してください。
***********************************************************************************************************

■Windows OSに以下の2つのモジュールをインストールします。

・[IT プロフェッショナル 用 Microsoft Online Services サインイン アシスタント RTW]

https://www.microsoft.com/ja-jp/download/details.aspx?id=41950

・[Azure Active Directory Module for Windows PowerShell (64 ビット バージョン)]

http://go.microsoft.com/fwlink/p/?linkid=236297

※「サーバマネージャ」-「機能」から機能の追加「.NET Framework3.5.1の機能」を追加する必要あり。

デスクトップにショートカットが作成されるので、起動してOffice365に接続。

■Office365への接続コマンド

Connect-MsolService

ポップアップにOffice365の管理者カウントを入力して接続。これで利用可能となる。

■参考
・フェデレーションドメインの情報取得

Get-MsolDomainFederationSettings –DomainName ******

Get-MsolDomain

・ユーザ情報(ImmutalbeID取得)

Get-MsolUser -DomainName 365.test.com | fl UserPrincipalName,ImmutableID

フェデレーション後、Office365側の設定がどうなっているか、確認するときによく利用します。特に、うまくいかないときに・・・IDPの証明書が正しくセットされているかなど。