【SharePoint】外部ユーザーへのファイル共有でワンタイムパスコードが利用出来ない場合の対処方法

こんにちは！
M365（特にSharePoint,Power Automate,Power Apps,Teams）に関する記事やちょっとした小ネタなどをご紹介していきます。

## はじめに
以前、SharePointの外部共有に関する検証を実施した際に陥った事象をまとめています。
古い時期に取得した環境での検証には注意が必要ですね・・・

:::note warn
本記事は、2023年8月時点の情報をもとに記載しています。
Microsoft 365のアップデートにより挙動が変わる場合がありますので予めご了承ください。
:::

## SharePoint上のファイルを外部に共有する
SharePointやOneDriveで外部のユーザーに対してファイル共有をする場合、大きく2つのパターンがあると思います。

**1. M365テナントにゲスト招待したユーザーにファイルを共有する
2. ゲスト招待なしでファイルを共有する**

2.のファイル共有を実現するためには、SharePoint管理センターの外部共有の範囲を「すべてのユーザー」または「新規および既存のゲスト」にする必要がありますが、今回はワンタイムパスコードを利用したかったので、「<strong>新規および既存のゲスト</strong>」を指定することにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/e7227842-f344-7c5b-3874-0270113cfcca.png)

## ワンタイムパスコードが発行されない場合がある
2つのM365テナントを使って以下の条件で外部共有の検証を実施しました。
検証前の想定では、**新規外部ユーザー**へのファイル共有では「**ワンタイムパスコード**」が求められ、**既存のゲスト**へのファイル共有であれば「**メールアドレス認証（ゲストアカウントでのサインイン）**」となることを期待していました。

### 前提条件
・共有場所：SharePointサイト（チームサイト）
・外部共有の範囲（SharePoint）：新規および既存のゲスト
・共有相手：ゲスト招待をしていない新規の外部ユーザー
・外部コラボレーション（Entra管理センター）のゲスト招待のドメイン制御あり
・ゲスト招待の制限：メンバーおよび管理者が招待可能
・共有元ユーザーはSharePointサイトの編集権限（サイトのメンバー）を付与

### 検証①
2022年6月頃に取得したM365の検証テナントを使って検証した結果がこちらです。
いずれのパターンでも想定したとおりにワンタイムパスコードによる共有が出来ました。

| 共有相手の種類 | ドメインの種類 | 共有元の動作 | 共有相手の操作 | 
|:-|:-:|:-|:-|
| M365アカウント | 許可ドメイン | ファイルの「共有」メニューからメールアドレスを指定してリンク送信 | メール内のリンクをクリック後、検証コードの送信画面に遷移 |
| M365アカウント | 禁止ドメイン | ファイルの「共有」メニューからメールアドレスを指定してリンク送信 | メール内のリンクをクリック後、検証コードの送信画面に遷移 |
| 個人用Microsoftアカウント | 許可ドメイン | ファイルの「共有」メニューからメールアドレスを指定してリンク送信 | メール内のリンクをクリック後、検証コードの送信画面に遷移 |
| 個人用Microsoftアカウント | 禁止ドメイン | ファイルの「共有」メニューからメールアドレスを指定してリンク送信 | メール内のリンクをクリック後、検証コードの送信画面に遷移 |
| 上記以外のアカウント<br>（Gmailなど） | 許可ドメイン | ファイルの「共有」メニューからメールアドレスを指定してリンク送信 | メール内のリンクをクリック後、検証コードの送信画面に遷移 |
| 上記以外のアカウント<br>（Gmailなど） | 禁止ドメイン | ファイルの「共有」メニューからメールアドレスを指定してリンク送信 | メール内のリンクをクリック後、検証コードの送信画面に遷移 |


### 検証②
2023年7月に取得したM365の検証テナントを使って検証した結果がこちらです。
検証①とは異なり、外部コラボレーションの設定の許可ドメイン／禁止ドメインの違いにより共有が出来る場合と出来ない場合が出てしまいました。
**・相手が許可ドメインの場合：共有相手がEntra IDにゲスト登録される
・相手が禁止ドメインの場合：共有不可（共有時のゲスト登録でブロックされる）**

| 共有相手の種類 | ドメインの種類 | 共有元の動作 | 共有相手の操作 | 
|:-|:-:|:-|:-|
| M365アカウント | 許可ドメイン | 共有リンクをメール送信＋Entra ID のゲストユーザーとして登録 | メール内のリンクをクリック後、メールアドレスで認証 |
| M365アカウント | 禁止ドメイン | 共有不可 | ― |
| 個人用Microsoftアカウント | 許可ドメイン | 共有リンクをメール送信＋Entra ID のゲストユーザーとして登録 | メール内のリンクをクリック後、メールアドレスで認証 |
| 個人用Microsoftアカウント | 禁止ドメイン | 共有不可 | ― |
| 上記以外のアカウント<br>（Gmailなど） | 許可ドメイン | 共有リンクをメール送信＋Entra ID のゲストユーザーとして登録 | メール内のリンクをクリック後、メールアドレスで認証 |
| 上記以外のアカウント<br>（Gmailなど） | 禁止ドメイン | 共有不可 | ― |

※ 禁止ドメインのユーザーを共有相手に指定した際の画面
（送信をクリックしても何も起こらず、入力したメールアドレスを削除後エラーが表示）
![スクリーンショット 2023-07-31 200136.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/6fb67d33-6445-61c6-5246-ce8866b2fef5.png)


## 原因は「Microsoft Entra B2Bの統合」の既定の設定値変更
色々と調べた結果、2023年3月31日以降に取得したテナントで「**Microsoft Entra B2Bの統合（旧 Azure AD B2Bの統合）**」が既定で**有効**になっていたことが、検証結果の違いに影響したものと判明しました。
この機能が有効になっていると、SharePointから外部のユーザーにファイル共有する際にSharePointによってゲストユーザーを自動作成する動きとなるため、ゲスト登録が前提のファイル共有しか出来なくなります。

セキュリティを考えると共有相手をゲスト管理することでのメリットはわかるのですが、現実問題としてゲスト登録なしで外部共有したいというニーズもあると思いますので、一長一短なのかなぁという印象です。。

## Microsoft Entra B2Bの統合を無効化する方法
運用上ワンタイムパスコードの利用が必要な場合は、PowerShellコマンドで機能を無効化することが出来ます。
本設定はテナント全体に影響しますので、利用目的に応じて注意して実施頂くことをお奨めします。
※ 上記とは反対に、無効から有効に変更する場合も注意が必要です。設定変更以前にファイル共有をしていた場合、設定変更後に相手が共有リンクをクリックすると、ゲスト承諾を求める動きになります。

### Microsoft Entra B2Bの統合を無効化するコマンド
無効化のコマンドは以下のとおりです。実行前にConnect-SPOServiceでSharePoint Onlineに接続してください。
```PowerShell
Set-SPOTenant -EnableAzureADB2BIntegration $false
```
## 最後に
検証②のテナントでも「EnableAzureADB2BIntegration」の値が$Trueになっていました。
そのため上記コマンドで統合を無効化し、再度外部共有の動作を検証したところ、検証①と同じ結果となり無事にワンタイムパスコードを利用出来るようになりました。

もし同じようなことで困っている方は、一度「Microsoft Entra B2Bの統合」の設定値を確認してみるとよいかもしれません。


## 参考資料
[SharePoint と OneDrive と Microsoft Entra B2B の統合](https://learn.microsoft.com/ja-jp/sharepoint/sharepoint-azureb2b-integration?WT.mc_id=M365-MVP-5002496)