GraphAPIを実装する際に使用することが多いシークレットトークンですが、期限が近付いても通知する機能は現状ないようなのでそれを通知するプログラムをC#で実装したいと思います。以下のサイトを参考に実装していきます
-
Azure AD に連携している各種証明書、クライアント シークレットの有効期限の抽出方法 | Japan Azure Identity Support Blog
こんにちは。Azure Identity チームの栗井です。 Azure AD の [アプリの登録] から各アプリに連携 ...
続きを読む
バージョン | |
---|---|
OS | Windows 11 Pro |
C# | .net 8.0 |
Azure.Identity | 1.11.3 |
Microsoft.Graph | 5.55.0 |
Azureアプリを登録する
Azureアプリを取得するためのAzureアプリを作成します。付与する権限はアプリケーション権限の「Application.Read.All」になります。
Azureアプリの作成手順は何度も紹介しているので以下を参考に作成して権限だけは変えてください
-
エラー発生時にメールを送るようにしてみる(M365版)<準備編> - ナストンのまとめ
前回はMailKitを使用してメール送信をしましたが、今回はGraphAPIを使用してメールを送信してみたいと思います ...
続きを読む
Azureアプリの取得
まずはすべてのAzureアプリを取得したいと思います
GraphAPIオブジェクトの作成
GraphAPIを呼び出す際に使用する認証オブジェクトを作成します
// クライアントシークレット認証の場合はscopesは固定
private readonly string[] _scopes = { "https://graph.microsoft.com/.default" };
private readonly string _clientId = "作成したAzureアプリ上で取得できるクライアントID(アプリケーションID)";
private readonly string _tenantId = "作成したAzureアプリ上で取得できるテナントID(ディレクトリID)";
private readonly string _clientSecret = "作成したAzureアプリ上で取得するクライアントシークレットキーの値";
private GraphServiceClient GetServiceClient()
{
var options = new ClientSecretCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
};
var clientSecretCredential = new ClientSecretCredential(
_tenantId, _clientId, _clientSecret, options);
return new GraphServiceClient(clientSecretCredential, _scopes);
}
Azure上に登録されているアプリをすべて取得する
Azure上に登録されているアプリすべてを取得して、そこからアプリ名とアプリID、シークレットトークン(表示名、使用開始日、使用終了日)と証明書(表示名、使用開始日、使用終了日)を表示させています
var applications = GetServiceClient().Applications.GetAsync().Result;
foreach (var app in applications.Value)
{
Console.WriteLine("アプリ名:" + app.DisplayName);
Console.WriteLine("アプリID:" + app.AppId);
foreach(var passwordCredential in app.PasswordCredentials)
{
Console.WriteLine("シークレットキー名:" + passwordCredential.DisplayName);
Console.WriteLine("シークレットキー使用開始日:" + passwordCredential.StartDateTime);
Console.WriteLine("シークレットキー使用終了日:" + passwordCredential.EndDateTime);
}
foreach (var keyCredential in app.KeyCredentials)
{
Console.WriteLine("証明書名:" + keyCredential.DisplayName);
Console.WriteLine("証明書使用開始日:" + keyCredential.StartDateTime);
Console.WriteLine("証明書使用終了日:" + keyCredential.EndDateTime);
}
}
AppIDが一致するAzureアプリを取得する
特定のAzureアプリを取得したい場合はFilterを使用して対象アプリを取得することができます
var applications = GetServiceClient().Applications.GetAsync((requestConfiguration) =>
{
// AppId でフィルタリング
requestConfiguration.QueryParameters.Filter = "AppId eq '対象となるAppId'";
}).Result
あいまい検索でAzureアプリを取得する
あいまい検索を使用して今回は表示名にTという文字が含まれるAzureアプリを取得しています
var applications = GetServiceClient().Applications.GetAsync((requestConfiguration) =>
{
// DisplayName で検索
// Search機能を使う際は以下の2つの設定が必要
requestConfiguration.QueryParameters.Count = true;
requestConfiguration.Headers.Add("ConsistencyLevel", "eventual");
// DisplayName~の箇所は"(ダブルクォーテーション)で囲む必要がある
requestConfiguration.QueryParameters.Search = "\"DisplayName:T\"";
}).Result
FilterやSearchについては以下のMSサイトが参考になります
-
Microsoft Entra ID オブジェクトの高度なクエリ機能 - Microsoft Graph | Microsoft Learn
Microsoft Entra ID オブジェクトは、データに効率的にアクセスするための詳細クエリ機能をサポートしていま ...
続きを読む
最後に
このようにすればシークレットトークンや証明書が期限切れになる前に通知を出すことができると思うので、利用してみてください
ただ、シークレットトークンは更新機能がなくシークレットトークンを新たに作成して、その値に置き換える必要があるので注意が必要です
会社紹介
私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています
会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造
この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています
ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します
-
アドバンスド・ソリューション株式会社
アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...
サイトへ移動
-
お問い合わせ | アドバンスド・ソリューション株式会社
お問い合わせはこちら