Office 365サインオンポリシーでカスタムクライアントを許可または拒否する

userAgent属性の使用

Office 365アプリのサインオンルールで特定のクライアントをフィルタリングして、Office 365リソースへのアクセスを許可または拒否することができます。このフィルターは、対応または信頼していない特定のクライアントへのアクセスを拒否する必要がある場合に、特に便利です。また、このフィルターを使用して、信頼できるクライアントのみを許可することもできます。これにより、Office 365アプリへのアクセス権を持つクライアントをより詳細に制御できます。

ベストプラクティス

Oktaのサインオンポリシーでは、ユーザーのブラウザーから送信されるUser-Agentリクエストヘッダーに含まれる情報が評価されます。ただし、User-Agentは悪意のあるアクターによるなりすましが可能です。これを回避するために、Oktaでは以下の実践をお勧めします。

  • サインオンポリシーの作成時に、信頼できるクライアントのみを許可する。
  • アプリへのアクセスを許可するクライアントタイプ、デバイスプラットフォーム、および信頼の組み合わせを指定する、1つまたは複数のルールを作成する。
  • アプリにアクセスするために、Device TrustまたはMFAを要求する。「デバイス」および「多要素認証」を参照してください。

この手順を開始する

Office 365で次のように操作します。

  1. サインオン(Sign On)タブに移動します。ユーザー認証(User authentication) > 認証ポリシー ポリシーの詳細を表示(View policy details)をクリックします。(または、セキュリティ(Security) > 認証ポリシー > Microsoft Office 365 > ルールを追加(Add Rule)に移動して、これにアクセスできます)。
  2. アプリルール(App Rule)ウィンドウで次のカスタム式をtrueとする(And The following custom expression is true)(If)If(And The following custom expression is true)セクションに移動します。
  3. Okta Expression Languageを使用してカスタム式を入力し、クライアントを許可または拒否します。次にいくつかの例(Examples)を示します。

  4. 必要に応じて他のセクションを完了し、保存(Save)をクリックします。「Office 365サインオンルールのオプション」を参照してください。
  5. サインオンポリシー(「Custom)」(Sign On Policy)セクションに戻り、このルールを適切な優先度レベルに位置付けします。Oktaで各ルールを優先度に従って評価し、最初に一致したルールを適用します。
  6. アクセスを許可または拒否するそれぞれのカスタムクライアントに対して、手順1〜5を繰り返します。

このルールにより、指定されたクライアントをフィルタリングして、ルールで定義された他の条件とアクションを適用し、Office 365へのアクセスを許可または拒否できるようになります。

カスタム式の良い例と悪い例をいくつか紹介します。

良い例

機能
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() 式が無効です。

関連項目