この記事は FIXER Advent Calendar 2020 (https://adventar.org/calendars/5587)
2日目の記事です。前回の記事は亀沢さんの slackワークフロービルダーで申請フローを作ってみた でした。MSもそうですが最近はワークフローをサクっと作るのが流行ってますね。
ということでこんにちは、ふるさと納税で何を買うかなかなか決まらない石川です。
さて、今回は Microsoft Graph SDK を使って Azure AD のグループを作る方法を紹介します。
ちなみに前回の記事(ライセンス管理編)は こちら
ADアプリを設定する
Azure AD を操作するのでADアプリが必要となります。作成方法は前回記事を参照いただくとして、この記事では必要な権限の紹介とその割り当て手順をお伝えします。
今回必要な権限は
- Group.Create
- Group.ReadWriteAll
- Directory.ReadWriteAll
の三つです。
ADアプリ => APIのアクセス許可 の画面から許可登録をして管理者の同意を与えましょう。
この状態になればOKです。
SDKを使って実装する
必要なものはこちら。
- Azure AD
- ADアプリのアプリケーション(クライアント)ID
- ADアプリのシークレット
- ADアプリが所属するディレクトリ(テナント)ID
各IDやシークレットの取得方法は前回記事をご参照ください。
では前回同様Graph SDKの導入から行います。
dotnet add package Microsoft.Graph
dotnet add package -v 1.0.0-preview.6 Microsoft.Graph.Auth
※Microsoft.Graph.Auth はプレビュー版を利用するため更新により使えなくなる可能性があります。
GraphServiceClientを作成していきますが前回記事で紹介しているため、詳細な説明は省きます。
var adapplication = ConfidentialClientApplicationBuilder
.Create(Environment.GetEnvironmentVariable("ClientId"))
.WithTenantId(Environment.GetEnvironmentVariable("TenantId"))
.WithClientSecret(Environment.GetEnvironmentVariable("ClientSecret"))
.Build();
var provider = new ClientCredentialProvider(adapplication);
var client = new GraphServiceClient(provider);
GraphServiceClientができたのでグループ作成部分を書いていきます。
// 作成するグループの定義
var group = new Group()
{
Description = description,
DisplayName = groupName,
GroupTypes = new List<string>
{
"Unified"
},
MailNickname = groupAlias,
MailEnabled = true,
SecurityEnabled = false,
Visibility = "HiddenMembership"
}
// グループの作成
await client.Groups.Request().AddAsync(group);
サクっとできますね。
渡しているパラメータを紐解いていきましょう
- Description: グループの説明
- DisplayName: グループの表示名
- GroupTypes: グループの種類, UnifiedにするとMicrosoft 365グループ
- MailNickname: グループのメールエイリアス
- MailEnabled: メールの有効化フラグ
- SecurityEnabled: セキュリティ有効化フラグ
- Visibillity: グループ表示の指定, Public(公開), Private(非公開), HiddenMembership(ユーザーからも非表示)から選択
MailEnabled, SecurityEnabled, GroupTypesの組み合わせでグループの種類が決まったりするので興味がある方は記事末尾の参考に記載している Microsoft Graph でのグループの操作 をチェックしてみてください。
ちなみに、Exchangeでよく?使われている配布グループはMicrosoft的にはあまり推奨されなくなっているようです。(参考記事参照)
それでは!