鍋綿ブログ

C#・SharePoint・SharePoint Framework・Office365を中心に扱うブログです。

外部ユーザーからのアクセス要求を承認してSharePointサイトに権限を付ける作業を自動化してみた

あんまり無さそうなシチュエーションですが、Forms + Logic Appsで簡単に出来たのでご紹介します。

 

 

やりたかったこと

以下のような使い方を実現できました。

  • 組織外のユーザーは申込フォームからアクセスを要求
  • 管理者は要求元を確認してアクセス要求を承認
  • 後は自動!

    > 承認されたらユーザーに招待メールを送信

    > ユーザーは招待メールに記載のリンクからSharePointサイトにアクセスできる

    > 管理者がサイトに権限を付ける作業は不要

仕組みの説明

概要図

f:id:micknabewata:20200207162939p:plain

概要図

ユーザー用の申し込みフォームはMicrosoft Formsで作成しました。
作成した回答フォームのURLはホームページなどで公開しておきます。
(このブログの右上にある「鍋綿デモサイト」リンクがそれです。)

誰かがFormsで回答するとLogic Appsが起動します。
Logic Appsは管理者に承認を求めます。
承認後、Graph APIを使って外部ユーザーを招待し、
そのユーザーを特定のAzure AD グループのメンバーとして追加します。

このAzure AD グループはSharePointサイトに権限を与えられているので、
ユーザー一人一人にアクセス権を付与する作業は必要ありません。

Microsoft Formsの設定

最低限、招待するアカウントを入力するところがあればOKです。
下記画像の例ではちょっとした説明なんかも入れました。

f:id:micknabewata:20200207163153p:plain

Fomsの画面

Azure AD アプリケーション登録

Logic Appsから外部ユーザー招待を行う際、Graph APIを利用します。
Graph APIを実行するためには認証が必要ですので、
先にアプリケーション登録を済ませておきます。

まずはAzure ADの管理画面で「アプリの登録」をクリックします。
で、新規登録ボタンをポチ。

f:id:micknabewata:20200207175329p:plain

アプリの登録画面

名前を分かりやすく付け、後は既定値で。

f:id:micknabewata:20200207175510p:plain

新規登録画面

「証明書とシークレット」をクリックし、「新しいクライアントシークレット」を登録します。有効期限はお好みでどうぞ。期限が切れるとシークレットを再発行する必要があります。

f:id:micknabewata:20200207175805p:plain

クライアントシークレットの発行

次にAPIのアクセス許可を与えます。アクセス許可の追加ボタンをクリックしてMicrosoft Graph APIを選択し、「アプリケーションの許可」の中からUser.Invite.Allを探して追加。その後管理者の同意を与えます。

f:id:micknabewata:20200207180038p:plain

アクセス許可の追加

Logic Appsの設定

起動は Fromsの回答で。回答内容は「応答の詳細を取得する」アクションで取ります。
下図では私の都合で外部ユーザーの招待前に一度承認を挟むようにしています。
このあたりはご都合に合わせてください。

f:id:micknabewata:20200208094924p:plain

Logic Apps起動部分

承認が終わった後のアクションはこんな感じです。「外部ユーザーを招待する」アクションの中身は後述。

f:id:micknabewata:20200208095439p:plain

招待部分

さて、このLogic Appsのキモである招待部分です。Graph APIを利用します。
使うアクションは「HTTP」です。設定値は以下。

 方法:POST
 URI:https://graph.microsoft.com/v1.0/invitations
 ヘッダー:
  キー:Content-Type
  値:application/json
 本文:

{
"inviteRedirectUrl": "https://nabewata365.sharepoint.com/sites/catalog",
"invitedUserEmailAddress": "@{body('応答の詳細を取得する')?['組織アカウントまたはMicrosoftアカウント']}",
"invitedUserMessageInfo": {
"customizedMessageBody": "招待メールの文言"
},
"sendInvitationMessage": true
}
 認証:Active Directory OAuth
 テナント:招待先テナントのドメイン名
 対象ユーザー:https://graph.microsoft.com
 クライアントID:登録したAzure AD アプリケーションのクライアントID
 シークレット:作成したシークレット
 

f:id:micknabewata:20200208100056p:plain

HTTPアクションの設定

デモ

こちらのリンクで実際の動作をお試し頂けます。(リンク先は当ブログ右上の「鍋綿デモサイト」と同じです。)実際に招待が行き、私が構築したデモ用SharePointサイトにアクセスして頂けるようになります。