Office 365サインオンポリシーでカスタムクライアントを許可または拒否する
userAgent属性の使用
Office 365アプリのサインオンルールで特定のクライアントをフィルタリングして、Office 365リソースへのアクセスを許可または拒否することができます。このフィルターは、対応または信頼していない特定のクライアントへのアクセスを拒否する必要がある場合に、特に便利です。また、このフィルターを使用して、信頼できるクライアントのみを許可することもできます。これにより、Office 365アプリへのアクセス権を持つクライアントをより詳細に制御できます。
カスタムクライアントをフィルタリングするためのサインオンポリシールールは、Classic EngineからOkta Identity Engineに移行されません。Office 365アプリインスタンスをOkta Identity Engineに移行する場合は、これらのルールを再作成する必要があります。Office 365カスタムユーザーエージェントを参照してください。
ベストプラクティス
Oktaのサインオンポリシーでは、ユーザーのブラウザーから送信されるUser-Agentリクエストヘッダーに含まれる情報が評価されます。ただし、User-Agentは悪意のあるアクターによるなりすましが可能です。これを回避するために、Oktaでは以下の実践をお勧めします。
この手順を開始する
Office 365で次のように操作します。
- サインオン(Sign On)タブに移動します。でポリシーの詳細を表示(View policy details)をクリックします。(または、に移動して、これにアクセスできます)。
- アプリルール(App Rule)ウィンドウで次のカスタム式をtrueとする(And The following custom expression is true)(If)のIf(And The following custom expression is true)セクションに移動します。
-
Okta Expression Languageを使用してカスタム式を入力し、クライアントを許可または拒否します。次にいくつかの例(Examples)を示します。
- 必要に応じて他のセクションを完了し、保存(Save)をクリックします。「Office 365サインオンルールのオプション」を参照してください。
- サインオンポリシー(「Custom)」(Sign On Policy)セクションに戻り、このルールを適切な優先度レベルに位置付けします。Oktaで各ルールを優先度に従って評価し、最初に一致したルールを適用します。
- アクセスを許可または拒否するそれぞれのカスタムクライアントに対して、手順1〜5を繰り返します。
このルールにより、指定されたクライアントをフィルタリングして、ルールで定義された他の条件とアクションを適用し、Office 365へのアクセスを許可または拒否できるようになります。
例
カスタム式の良い例と悪い例をいくつか紹介します。
Okta式言語の文字列操作では、大文字と小文字が区別されます。大文字と小文字を区別しない条件を書き込むには、比較の前にユーザーエージェントの値を大文字または小文字に変換します。
良い例
| 式 | 機能 |
|---|---|
request.userAgent.contains("WinWord") |
WinWordが含まれるユーザーエージェントのリクエストをフィルタリングします。 |
request.userAgent.toLowerCase().contains("winword") |
リクエストを小文字に変換してから、winwordが含まれるユーザーエージェントをフィルタリングします。 |
request.userAgent.toUpperCase().contains("WINWORD") |
リクエストを大文字に変換してから、WINWORDが含まれるユーザーエージェントをフィルタリングします。 |
request.userAgent.contains("WinWord") OR request.userAgent.contains("Windows-AzureAD-Authentication-Provider") |
WinWordまたはWindows-AzureAD-Authentication-Providerが含まれるユーザーエージェントのリクエストをフィルタリングします。 |
request.userAgent.contains("compatible;") AND request.userAgent.contains("MSIE 7") |
compatibleおよびMSIE 7を含むユーザーエージェントのリクエストをフィルタリングします。 |
悪い例
| 式 | 機能 |
|---|---|
request.userAgent.contains("") |
すべてのリクエストに一致しています。 |
request.userAgent.contains() |
式が無効です。 |
関連項目