TOPICS

Microsoft 365 のアプリケーションで頻繁にサインインが求められる場合の対処法

対象

HENNGE Access Control から Microsoft 365 へ HENNGE Access Control Directory Sync を使用したユーザー同期を行うお客様が対象です。

目的

HENNGE Access Control から Microsoft 365 へ HENNGE Access Control Directory Sync を使用してユーザーを同期する構成で利用されている場合、フェデレーション後に作成されたユーザーにおいては、Microsoft 365 の関連アプリケーションにおいて頻繁にサインインが求められます。
これはフェデレーションされた環境において、 HENNGE Access Control Directory Sync がユーザーの属性 LastPasswordChangeTimestamp および StsRefreshTokensValidFrom に値を設定することができないことに起因しており、これら 2 つの属性に値が設定されていない場合、Microsoft 365 のアプリケーションはの更新トークンは 12 時間で失効することが確認されております。
この事象を解消するための手順を以下に記載します。

注意事項

1. 本記事の内容は 2022 年 7 月時点での製品仕様、および Microsoft 365 の仕様をもとにしたものであり、以後予告なく変更される場合があります。

2. 本手順には Microsoft 365 全体管理者アカウントを使用します。

3. 本記事ではMicrosoft社のMSOnline PowerShellモジュールを用いた対処法を記載しております。Microsoft Graph PowerShellモジュールを使用した本事象への対応につきましては、以下の記事をご参照ください。
 Microsoft 365 のアプリケーションで頻繁にサインインが求められる場合の対処法 ( Microsoft Graph 版 )

詳細手順説明

1. 事前確認事項

1.1. 以下の記事をご参考いただき、PowerShell アプリケーションから Microsoft 365 への接続を行います。

WindowsマシンでPowerShellを利用する方法

2. 個別のユーザーへの設定方法

2.1. 以下のコマンドを実行し、2 つの属性に値が設定されていないことを確認します。"UserPrincipalName" には対象ユーザーの UserPrincipalName を入力してください。

get-msoluser -UserPrincipalName "UserPrincipalName" | select-object UserPrincipalName,LastPasswordChangeTimestamp,StsRefreshTokensValidFrom

実行例 : 

対象ユーザーが "user@example.com" の場合、コマンドは以下となります。

get-msoluser -UserPrincipalName user@example.com | select-object UserPrincipalName,LastPasswordChangeTimestamp,StsRefreshTokensValidFrom

実行結果例 : 

Screen_Shot_2022-07-11_at_22.05.37.png

2.2. 以下のコマンドを実行し、2 つの属性に値を設定します。"UserPrincipalName" には対象ユーザーの UserPrincipalName を入力してください。

set-msoluser -UserPrincipalName "UserPrincipalName" -LastPasswordChangeTimestamp ( Get-Date ) -StsRefreshTokensValidFrom ( Get-Date )

実行例 : 

対象ユーザーが "user@example.com" の場合、コマンドは以下となります。

set-msoluser -UserPrincipalName user@example.com -LastPasswordChangeTimestamp ( Get-Date ) -StsRefreshTokensValidFrom ( Get-Date )

2.3. 以下のコマンドを実行し、2 つの属性に値が設定されていることを確認します。"UserPrincipalName" には対象ユーザーの UserPrincipalName を入力してください。

get-msoluser -UserPrincipalName "UserPrincipalName" | select-object UserPrincipalName,LastPasswordChangeTimestamp,StsRefreshTokensValidFrom

実行例 : 

対象ユーザーが "user@example.com" の場合、コマンドは以下となります。

get-msoluser -UserPrincipalName user@example.com | select-object UserPrincipalName,LastPasswordChangeTimestamp,StsRefreshTokensValidFrom

実行結果例 : 

Screen_Shot_2022-07-11_at_22.05.23.png

 

3. 一括設定方法

3.1. このページ下部からスクリプト SetLastPasswordChangeTimestampTool.ps1 をダウンロードし、任意のフォルダーに保存します。

3.2. スクリプトをテキスト エディターで開きます。

3.3. スクリプトの 1 行目、2 行目に Microsoft 365 の全体管理者アカウント情報を記載し、保存します。

記載例 : 

$Office365UPN = "admin@example.onmicrosoft.com";
$Office365Password = "Example1234";

 

3.4. Windows PowerShell を管理者権限で起動します。

3.5. 以下のコマンドを実行し、3.1. でスクリプトファイルを保存したフォルダーに移動します。

cd <2.1. でファイルを保存したフォルダーのパス>

3.6. 以下のコマンドを実行し、スクリプトを実行します。

powershell -ExecutionPolicy Bypass -File .\SetLastPasswordChangeTimestampTool.ps1

3.7. 実行ログが、3.1. でスクリプトファイルを保存したフォルダー配下の log フォルダーに出力されます。出力ファイル名 : yyyymmddhhmmss.txt (実行時刻がファイル名となります。)

実行結果例 : 

[Successful user]

DisplayName UserPrincipalName LastPasswordChangeTimestamp StsRefreshTokensValidFrom
----------- ----------------- --------------------------- -------------------------
user user@example.com 2022/07/11 13:29:07 2022/07/11 13:29:08

[Failed user]

※ [Failed user] が空でない場合は何らかの問題で処理が失敗しています。
 [Successful user]は、 LastPasswordChangeTimestamp, StsRefreshTokensValidFrom に値を設定できたユーザーの一覧を表します。
 [Failed user]は、 LastPasswordChangeTimestamp, StsRefreshTokensValidFrom に値を書き込む際、失敗したユーザーの一覧を表します。

4. 定期実行方法

スクリプトを Windows OS のタスク スケジューラー に登録し、定期的に実行することも可能です。下記の設定例では 1 日に 1 回、午前 3:00 にスクリプトが実行されます。
実行する端末では以下の記事の設定が完了し、Microsoft 365 に PowerShell で接続できる状態になっている必要があります。 
WindowsマシンでPowerShellを利用する方法

4.1. Windows OS のタスク スケジューラー を起動し、画面左の [タスクスケジューラ ライブラリ] をクリックし、画面右の [ タスクの作成 ] をクリックします。

4.2 以下のように設定します。

名前:SetLastPasswordChangeTimestamp
説明:Microsoft 365 上の各ユーザーの LastPasswordChangeTimestamp 属性を設定
[ユーザーがログオンしているかどうかにかかわらず実行する]:チェックを入れる
[最上位の特権で実行する]:チェックを入れる

4.3. トリガー タブで [新規...] をクリックし、以下の設定を入力して [ OK ] をクリックします。

タスクの開始:スケジュールに従う
設定:毎日
開始:導入日 3:00
間隔:1 日

4.4. 操作 タブで [新規...] をクリックし、以下の設定を入力して [ OK ] をクリックします。

操作:プログラムの開始
プログラム/スクリプト : %Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加 : -ExecutionPolicy Bypass ".\SetLastPasswordChangeTimestampTool.ps1"
開始 : <3.1. でファイルを保存したフォルダーのパス>

4.5. タスクスケジューラから6.で作成したタスクを右クリックし、[ 実行する ] をクリックしてタスクを手動実行して、実行結果のログ ファイルが 3.1. でスクリプトファイルを保存したフォルダー配下の log フォルダーに出力されることを確認します。出力ファイル名 :

yyyymmddhhmmss.txt (実行時刻がファイル名となります。)

参考

フェデレーション ユーザーは、Azure AD頻繁にサインインする必要があります。

Microsoft ID プラットフォームでの構成可能なトークンの有効期間 (プレビュー)

 

          
この記事は役に立ちましたか?