はじめに
Webシステムで管理している情報をOutlookの予定表に出力、削除を行います
バックエンドと書いていますが、本記事ではREST Apiを呼んで操作を行います。
ユーザアクセスの必要がない方法なので、バッチやWebサービスから操作することが出来ます
必要なもの
- Azureサブスクリプション
- AzureActiveDirectryo(以下AAD)の管理者権限(他人に依頼しても可)
- Restを叩ける環境(本記事ではVSCodeのREST Clientを使用)
準備
まずはAADの権限周りを設定しましょう
AADにアクセス
アプリの登録から新規登録を選択
大きすぎてボタンと思わないMicrosoftGraphを選択
calendarと入力し、検索結果のCalendards.ReadWriteを選択しアクセス許可の追加を選択
今回はカレンダーのイベント作成を行うので、上記の権限ですが、それ以外は
MicrosoftGraphの
ページを確認して適切な権限を付与しましょう。
証明書とシークレットから新しいクライアントシークレットを選択
値をどこかに保存しておきましょう。これは再表示されません。パスワード的なものですね
AAD管理者でログインし***に管理者の同意を与えますを選択
アプリケーション(クライアント)とディレクトリ(テナント)IDを保存しておきましょう
いよいよカレンダーイベント作成
流れは
MicrosoftGraphにログインするとトークンが返ってくるので、WebAPIにセットし各種APIを呼び出す
MicrosoftGraphにログイン
@ClientID=保存しておいたアプリケーション(クライアント)
@ClientSecret=保存しておいたクライアントシークレットの値
@Tenant=保存しておいたディレクトリ(テナント)ID
POST https://login.microsoftonline.com/{{Tenant}}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id={{ClientID}}
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret={{ClientSecret }}
&grant_type=client_credentials
VSCodeのRESTClientだとCtrl+Alt+rでコマンドを発射できます
ログインに成功するとaccess_tokenが返ってきますので、保存しておきます
予定を作成する
それでは予定を作成してみましょう。
UserId:予定を作成するユーザ(メールアドレス)
AADToekn:ログインで得られたトークンにBearer をつけたもの
Json:予定情報
transactionId:ユニークID(GUIDがいいと思います)
@UserId =hogehoge@test365.onmicrosoft.com
@AADToekn=Bearer eyJ0eXAiOiJKV1QiLCJ...............
###
post https://graph.microsoft.com/v1.0/users/{{UserId}}/calendar/events
Content-type: application/json
Authorization: {{ AADToekn }}
{
"subject": "test",
"start": {
"dateTime": "2022-01-04T00:00:00",
"timeZone": "Asia/Tokyo"
},
"end": {
"dateTime": "2022-01-05T00:00:00",
"timeZone": "Asia/Tokyo"
},
"location":{
"displayName":"年始の出勤"
},
"isAllDay":true,
"transactionId":"F0A42756-575E-4590-82D6-4C18FCD2355F"
}
jsonのプロパティはeventリソースの種類から確認できます
@UserId =hogehoge@test365.onmicrosoft.com
@AADToekn=Bearer eyJ0eXAiOiJKV1QiLC........
@id=AAMkAGRhO.....
delete https://graph.microsoft.com/v1.0/users/{{UserId}}/calendar/events/{{id}}
Authorization: {{ AADToekn }}
で削除も可能です。
idは予定を作成した時のレスポンスに入っています。