Microsoft 365 の大量のメール用の OAuth 認証

OAuth 認証を使用して SMTP プロトコルに接続し、Office 365 ユーザーの電子メール データにアクセスする方法を説明します。

以下に説明する SMTP プロトコルの OAuth2 サポートは、Microsoft 365 (Office on the web を含む) と Outlook.com の両方のユーザーが利用できます。

OAuth 2.0 プロトコルに慣れていない場合は、「Microsoft ID プラットフォームでの OAuth 2.0 プロトコルの概要」を参照してください。 OAuth 2.0 プロトコルを実装してユーザーを認証し、セキュリティで保護された API にアクセスする Microsoft 認証ライブラリ (MSAL) の詳細については、「 MSAL の概要」を参照してください。

アプリケーションを登録する

OAuth を使用するには、アプリケーションを Microsoft Entra に登録する必要があります。

Microsoft ID プラットフォームにアプリケーションを登録する」に記載されている手順に従って、新しいアプリケーションを作成します。

  1. 少なくともクラウド アプリケーション管理者として Microsoft Entra 管理センター にサインインします。

  2. [ID]>[アプリケーション>] を参照しアプリの登録 [新しい登録] を選択します。

    新規登録のスクリーンショット。

  3. アプリケーションの表示名を入力します。 アプリケーションのユーザーは、サインイン時など、アプリを使用するときに表示名が表示される場合があります。 表示名はいつでも変更でき、複数のアプリの登録で同じ名前を共有することができます。 アプリ登録の自動生成されたアプリケーション (クライアント) ID は、表示名ではなく、ID プラットフォーム内でアプリを一意に識別します。

    [アプリケーションの登録] のスクリーンショット。

  4. 登録後、いくつかの ID が作成されます。そのうちのいくつかは、後で OAuth 2.0 トークンを取得するために必要になります。

    複数の ID のスクリーンショット。

API アクセス許可を追加する

  1. 左側のメニューで、[ API アクセス許可 ]、[ アクセス許可の追加] の順に選択します。

    hveoauth API のアクセス許可のスクリーンショット。

  2. organizationで使用している API に移動し、Office 365 Exchange Onlineを検索します。

    私の organization が使用している API のスクリーンショット。

  3. [ API アクセス許可の要求] で、[ アプリケーションのアクセス許可]、[ Mail.Send]、[ アクセス許可の追加] の順に選択します。

    注:

    Mail.Send アプリケーションのアクセス許可は、すべての Exchange メール ユーザーから電子メールを送信する機能を許可しません。 説明した構成に従って、アプリケーションが Exchange アプリケーションのアクセス制御を通じて他のメール ユーザーに対して明示的に承認されていない限り、HVE アカウント タイプのメール ユーザーのみがメールを送信できます。 構成に応じて、これは次のいずれかを使用して適用されます: アプリケーション アクセス ポリシー (レガシ)、または Exchange Online のアプリケーションのロール ベースの Access Control

  4. API アクセス許可を追加した後、管理者は [管理者の同意を付与する] を選択する必要があります。

    管理者の同意を付与するスクリーンショット。

アプリ シークレットでアプリケーションのアクセス許可を使用するため、レガシ OAuth サードパーティ アプリケーションを許可する委任アクセス許可とアプリケーション アクセス許可の両方をサポートしています。

アクセス許可の委任:

  1. [API のアクセス許可] タブで、Office 365 Exchange Online\Delegated Permissions から Mail.Send API アクセス許可を追加します。
  2. [ API のアクセス許可 ] タブで、[ 管理者の同意の付与] を選択します。
  3. [ 認証 ] タブで、[ パブリック クライアント フローを許可する] を有効にします
  4. HVE メール ユーザーの資格情報を使用して、対象ユーザー https://outlook.office.com/.defaultのトークンを要求します。

アプリケーションのアクセス許可:

  1. [API のアクセス許可] タブで、[Office 365 Exchange Online\Application アクセス許可] から Mail.Send API アクセス許可を追加します。
  2. [ API のアクセス許可 ] タブで、[ 管理者の同意の付与] を選択します。
  3. [ 証明書 & シークレット ] タブで、新しいクライアント シークレットを追加します。
  4. クライアント シークレットを使用して、対象ユーザー https://outlook.office.com/.defaultのトークンを要求します。

OAuth アクセスを許可されたアプリケーションに制限する

High Volume Email では、OAuth 認証を特定の Microsoft Entra ID アプリケーション セットに制限することをサポートしています。 これにより、不正または意図しないアプリケーションが HVE アカウントを使用するのを防ぎ、不正使用や予期しない請求のリスクを軽減します。 デフォルトでは、有効な OAuth 資格情報と必要な Exchange Online アクセス許可を持つアプリケーションは、HVE に対して認証できます。 許可されたアプリケーションを使用すると、特定の HVE アカウントを使用して電子メールを送信することを許可するアプリケーションを明示的に定義できます。

許可されたアプリケーションのしくみ

HVE アカウントに対して許可されたアプリケーションが構成されている場合:

  • OAuth 認証中に、HVE はアクセス トークン内のアプリケーション ID を検証します。
  • HVE アカウントに対して明示的に許可されているアプリケーションのみが、正常に認証できます。
  • 他のアプリケーションからの認証要求は拒否されます。 検証は、OAuth トークンの取得に使用される Microsoft Entra ID アプリケーションのサービス プリンシパル ID (オブジェクト ID) に基づいて行われます。

注:

許可されているアプリケーションは OAuth 認証にのみ適用されます。 パスワードを使用した SMTP 基本認証には影響しません。

許可されたアプリケーションを構成する

許可されているアプリケーションは、Exchange Online PowerShell を使用して HVE アカウントごとに構成されます。 Microsoft Entra ID アプリケーションは、サービス プリンシパルの GUID を指定することで追加または削除できます。

注:

許可するアプリ ID を指定するには、アプリケーションの登録にエンタープライズ アプリケーション ノード (Azure portal) の概要ページのサービス プリンシパル オブジェクト ID を使用する必要があります。 [App Registrations] ノードの [Overview] ページのオブジェクト ID は使用しないでください。 正しくないオブジェクト ID を使用すると、認証エラーが発生します。 OAuth を使用して IMAP、POP、または SMTP 接続を認証する方法の詳細をご覧ください。

許可されたアプリケーションを追加する

Add-HVEAppAccess -Identity HVEaccount@contoso.com -AppIds <service-principal-id-1>,<service-principal-id-2>

許可されたアプリケーションを削除する

Remove-HVEAppAccess -Identity HVEaccount@contoso.com -AppIds <service-principal-id-1>,<service-principal-id-2>

許可されたアプリケーションの表示

Get-HVEAccountSettings -Identity HVEaccount@contoso.com | Format-List *AllowedApps*

制限と動作

  • 各 HVE アカウントには、最大 10 個の許可されたアプリケーションを構成できます。
  • HVE アカウントに許可されたアプリケーションが構成されていない場合、追加のアプリケーション レベルの制限は適用されません。

HVE SMTP プロトコル交換

SMTP サーバー接続を認証するには、クライアントがSASL XOAUTH2形式の AUTH コマンドで応答する必要があります。 SASL XOAUTH2 ユーザー名とアクセス トークンを次の形式でエンコードします。

base64("user=" + userName + "^Aauth=Bearer " + accessToken + "^A^A")

^A Control + A (%x01) を表します。

たとえば、アクセス トークン EwBAAl3BAAUFFpUAo7J3Ve0bjLBWZWCclRC3EoAA を使用してapplication@contoso.onmicrosoft.comにアクセスするSASL XOAUTH2形式は次のとおりです。

base64("user=application@contoso.onmicrosoft.com^Aauth=Bearer EwBAAl3BAAUFFpUAo7J3Ve0bjLBWZWCclRC3EoAA^A^A")

認証が成功するクライアントとサーバーのメッセージ交換の例:

[connection begins]

C: auth xoauth2

S: 334

C: dXNlcj1hcHBsaWNhdGlvbkBjb250b3NvLm9ubWljcm9zb2Z0LmNvbQFBdXRoPUJlYXJlciBFd0JBQWwzQkFBVUZGcFVBbzdKM1ZlMGJqTEJXWldDY2xSQzNFb0FBAQE=

S: 235 2.7.0 Authentication successful

[connection continues...]

認証エラーが発生するクライアントとサーバーのメッセージ交換の例:

[connection begins]

C: auth xoauth2

S: 334

C: dXNlcj1hcHBsaWNhdGlvbkBjb250b3NvLm9ubWljcm9zb2Z0LmNvbQFBdXRoPUJlYXJlciBFd0JBQWwzQkFBVUZGcFVBbzdKM1ZlMGJqTEJXWldDY2xSQzNFb0FBAQE=

S: 535 5.7.3 Authentication unsuccessful