社畜の所業

社畜の所業

Microsoft365の機能について解説をしていきたいと思います。このブログの情報をご活用いただければ幸いです。たまに他の情報も取り入れていきたいと思います。

※このサイトはPR記事を含みます。

【Microsoft365参考書】OAuth とは?OAuth と SMTP Auth の違いとは?

OAuth とは?OAuth と SMTP Auth の違いとは?

 

Microsoft 365 では、SMTP Auth(基本認証)が廃止されることが決定しており、OAuth (先進認証) への切り替えが必要となっています。

 

it-bibouroku.hateblo.jp

 

今回は OAuth とはどういうものかや SMTP Auth の違いについて解説したいと思います。

 

 

 

 

OAuth とは?

Microsoft 365 では、認証基盤として Microsoft Entra ID(旧 Azure AD)を利用しています。

OAuth とは、パスワードを直接渡さずにアクセス権を委任する仕組みです。

OAuthは「認証(Authentication)」ではなく、「認可(Authorization)」の仕組みです。
「このクライアントは、このリソースに、この範囲で、いつまでアクセスしてよいか」を安全に伝えるための アクセス委譲プロトコルです。

 

仕組みのイメージ

  1. ユーザーがサインイン
  2. Entra ID がアクセストークンを発行
  3. アプリはトークンを使って API にアクセス

パスワードそのものはアプリ側に保存されません。

 

 

 

OAuth の通信の流れ

OAuthは「どうやってトークンを手に入れるか」を Grant Type(フロー)として定義しています。

(A) Authorization Code Flow(ユーザーあり)

Client → Authorization Server → User Login
Client ←Authorization Code ← User Consent
Client → Token Endpoint → Access Token
Client → Resource Server (Bearer Token)

  • Web / モバイルアプリ向け
  • 最も安全
  • ユーザー同意が前提

 

(B) Client Credentials Flow(ユーザーなし)

Client → Token Endpoint (client_id + secret)
Client ←Access Token
Client → Resource Server

  • サーバー間通信
  • バッチ・デーモン・SMTP OAuthなど
  • ユーザーは登場しない

 

 

 

OAuth の特徴

① トークンベース認証

アクセストークンを使って認証を行います。
有効期限があり、リフレッシュトークンで更新可能です。

② 多要素認証(MFA)対応

MFA や条件付きアクセスと連携可能。

③ 細かいアクセス制御

アプリ単位で「Mail.Send」「Mailbox.Read」などのスコープを指定できます。

④ セキュリティが高い

パスワード漏洩リスクが大幅に低減。

 

 

 

なぜOAuthは安全なのか?

① パスワードを渡さない

パスワード漏洩 = 全権限 → OAuthでは起きない

② 最小権限(Scope)

  • mail.send だけ許可
  • mail.read は不可 → 被害半径が小さい

③ 短命トークン

  • 漏れてもすぐ失効(数分〜1時間)
  • Refresh Tokenで再発行(制御可能)

④ Resource Serverは認証を知らない

  • APIは 署名検証だけ
  • スケールしやすい

 

 

 

SMTP Auth とは?

SMTP Auth は、SMTP プロトコルでメール送信する際に、ユーザー名とパスワードで認証する方式です。

Microsoft 365 では、Exchange Online の SMTP クライアント送信で利用されます。

 

it-bibouroku.hateblo.jp

 

 

 

OAuth と SMTP Auth の違い

比較項目 OAuth SMTP Auth(Basic)
認証方式 トークン ユーザー名+パスワード
MFA対応 可能 原則不可
セキュリティ 高い 低い(パスワード漏洩リスク)
推奨度 Microsoft推奨 廃止方向
API利用 Microsoft Graph など SMTP のみ

 

SMTP Auth
  • アプリが ユーザーID+パスワード を預かる
  • アプリが 無制限アクセス権 を持つ
OAuth
  • パスワードは 一切渡さない
  • スコープ付き・期限付きトークンだけ渡す

 

 

 

なぜ、基本認証は廃止されるのか?

  • パスワードスプレー攻撃に弱い
  • 多要素認証が使えない
  • レガシープロトコルは攻撃対象になりやすい

現在は OAuth 2.0 ベースのモダン認証が標準です。

 

it-bibouroku.hateblo.jp

 

 

 

OAuth で SMTP 送信するには?

OAuth で SMTP 送信する設定は、実はこの 3ステップ だけです。

  1. アプリを登録する(Microsoft Entra / 旧 Azure AD)
  2. OAuth の「鍵(アクセストークン)」を取得する
  3. SMTP でその鍵を使って送信する

Exchange Online で OAuth 送信するとは
「パスワードの代わりに、有効期限つきの“安全な鍵”を使ってSMTP でメールを送ること」です。

 

OAuth の構成要件

SMTP AUTH(クライアント送信、通常 TCP/587)で OAuth を使う場合

  • SMTP サーバー:smtp.office365.com(STARTTLS)
  • 認証方式:SASL XOAUTH2(ユーザー名 + Bearer Access Token を Base64 で送る) 
  • 事前条件:テナント/メールボックスで SMTP AUTH が許可されていること
    SMTP AUTH は組織全体・メールボックス単位で無効化でき、無効だと使えません 
  • トークン発行元:Microsoft Entra ID
    OAuth を使うには アプリ登録が必要

 

ステップ1:アプリを登録する(OAuth の準備)

次に 「誰が OAuth を使うのか」を登録します。

これが アプリ登録 です。

「IMAP / POP / SMTP を OAuth で使うには、アプリ登録が必要」です。
この作業は「このプログラムは、Exchange Online に接続してもいいですよ」と Microsoft に登録する作業です。

登録後に手に入るもの
  • アプリケーションID(Client ID) → OAuth の世界での「名札」

※この時点では、まだメールは送れません

 

ステップ2:メール送信用の「権限」を与える

OAuth では「何をしていいか」を スコープ(権限)で指定します。

SMTP 送信に必要な権限は、Microsoft が決めています。

SMTP 送信用の正式なスコープ

https://outlook.office.com/SMTP.Send

「このアプリは メール送信だけ していい」と許可を出しています。

※管理者が 同意(管理者同意) する必要があります

 

ステップ3:OAuth の「鍵(アクセストークン)」を取得する

ここで初めて OAuth らしい処理が出てきます。

「トークンサーバーからアクセストークンを取得します」

アクセストークンとは?
  • 有効期限つきの デジタルな鍵
  • パスワードの代わりに使う
  • 漏れても期限が切れたら使えない

作業としては以下のようなイメージです。

  1. ログイン → その場限りの 入館証 をもらう
  2. その入館証で SMTP サーバーに入る

 

ステップ4:SMTP で OAuth を使って送信する(XOAUTH2)

いよいよメール送信です。

接続先(固定)
  • サーバー:smtp.office365.com
  • ポート:587
  • 暗号化:STARTTLS
OAuth を SMTP に渡す方法

SMTP では XOAUTH2 という形式でアクセストークンを渡します。

 

Plain Text

base64(
"user=メールアドレス"
+ Control+A
+ "auth=Bearer アクセストークン"
+ Control+A + Control+A
)
その他の行を表示する

  • Control+A は 0x01(見えない制御文字)
  • パスワードは 一切使いません
    これを SMTP の認証時に送ります

 

 

 

EntraID 管理画面で行うことは?

実際に EntraID 管理センターで行うことは以下の内容です。

  • アプリ登録を作る
  • API のアクセス許可で「SMTP送信(SMTP.Send)」を追加
  • 管理者の同意(Admin consent)を付与

 

事前に知っておくこと

  • SMTP AUTH で OAuth を使う場合、トークン要求時に SMTP用スコープを指定します:https://outlook.office.com/SMTP.Send
  • Entra 管理センターでの権限追加は 「API のアクセス許可」→「アクセス許可の追加」 から行います。

 

手順1:Entra 管理センターで「アプリ登録」を作成する

  1. Microsoft Entra 管理センターにサインインします。
  2. 左メニューで Entra ID → アプリケーションの登録 → すべてのアプリケーション を開きます。
  3. 「新規登録」を選び、アプリを作成します。
  4. 名前:任意(例:SMTP-OAuth-Sender)
  5. アカウントの種類:組織内利用なら「この組織ディレクトリのみ」を選ぶのが一般的です。
  6. 登録が完了したら、概要画面の アプリケーション(クライアント)ID と ディレクトリ(テナント)ID を控えます(後でトークン取得に使います)。

 

手順2:API のアクセス許可に「SMTP.Send」を追加する

Entra ID → アプリケーションの登録 →(対象アプリ)→ API のアクセス許可 → アクセス許可の追加

 

具体的には

  1. 作成したアプリの左メニューで 「API のアクセス許可」 を開きます。 
  2. 「アクセス許可の追加」 をクリックします。
  3. ここで 「Microsoft Graph」 ではなく、SMTP/IMAP/POP 用のスコープを使うための流れになります(最終的にトークン要求時に https://outlook.office.com/SMTP.Send を指定することが要件)
  4. 委任されたアクセス許可(Delegated permissions) を使うシナリオの場合、SMTP 送信のスコープとして https://outlook.office.com/SMTP.Send を要求対象に含めます。

併せて、必要なら offline_access も要求できます(refresh token を得て、期限切れ時に更新できます)

 

ポイント
  • “SMTP.Send” は「メール送信していいよ」という許可です。
  • “offline_access” は「再ログインなしでトークン更新していいよ」という許可です。 

 

手順3:管理者の同意(Admin consent)を付与する

権限を追加しただけでは有効にならないことが多く、管理者が同意する必要があります。
権限(アクセス許可)を追加した後に同意が必要になることを説明しています。 

 

  1. 「API のアクセス許可」 画面で「(テナント名)に管理者の同意を与えます」(Grant admin consent)を実行します。
  2. 確認ダイアログが出たら承認します。

 

ここまでで Entra 側の設定は完了です。

Entra 管理画面での設定が終わったら、次は開発/送信側で以下の設定をします。

  • トークン取得時に https://outlook.office.com/SMTP.Send をスコープとして指定して access token を取得する
  • SMTP で SASL XOAUTH2 形式にして渡す(Base64で user=...^Aauth=Bearer ...^A^A)

 

 

it-bibouroku.hateblo.jp

 

it-bibouroku.hateblo.jp