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 プラットフォームにアプリケーションを登録する」に記載されている手順に従って、新しいアプリケーションを作成します。
少なくともクラウド アプリケーション管理者としてMicrosoft Entra 管理センターにサインインします。
[Id>Applications>アプリの登録 に移動し、[新しい登録] を選択します。
アプリケーションの表示名を入力します。 アプリケーションのユーザーは、サインイン中など、アプリを使用するときに表示名が表示される場合があります。 表示名はいつでも変更でき、複数のアプリ登録で同じ名前を共有できます。 アプリの登録によって自動的に生成されるアプリケーション (クライアント) ID は、表示名ではなく、ID プラットフォーム内でアプリを一意に識別します。
登録後、いくつかの ID が作成されます。これらの ID の一部は、後で OAuth 2.0 トークンを取得するために必要になります。
API アクセス許可を追加する
左側のメニューで [ API アクセス許可 ] を選択し、[ アクセス許可の追加] を選択します。
organizationが使用する API に移動し、Office 365 Exchange Onlineを検索します。
[ API のアクセス許可の要求] で、[ アプリケーションのアクセス許可] を選択し、[ Mail.Send] を選択し、[ アクセス許可の追加] を選択します。
API アクセス許可を追加した後、管理者は [ 管理者の同意を付与する] を選択する必要があります。
アプリ シークレットでアプリケーションのアクセス許可を使用するため、従来の OAuth サード パーティ アプリケーションを許可するための委任アクセス許可とアプリケーションアクセス許可の両方をサポートしています。
委任のアクセス許可:
- [API のアクセス許可] タブで、Office 365 Exchange Online\委任されたアクセス許可から Mail.Send API アクセス許可を追加します。
- [ API のアクセス許可 ] タブで、[ 管理者の同意の付与] を選択します。
- [ 認証 ] タブで、[ パブリック クライアント フローを許可する] を有効にします。
-
HVE メール ユーザーの資格情報を使用して、対象ユーザー
https://outlook.office.com/.default
のトークンを要求します。
アプリケーションのアクセス許可:
- [API のアクセス許可] タブで、Office 365 Exchange Online\アプリケーションのアクセス許可から Mail.Send API アクセス許可を追加します。
- [ API のアクセス許可 ] タブで、[ 管理者の同意の付与] を選択します。
- [ 証明書 & シークレット ] タブで、新しいクライアント シークレットを追加します。
-
クライアント シークレットを使用して、対象ユーザーのトークンを要求
https://outlook.office.com/.default
。
HVE SMTP プロトコル交換
SMTP サーバー接続を認証するには、クライアントが AUTH
コマンドを SASL XOAUTH2
形式で応答する必要があります。
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