M365関連 技術

Azure上のシークレットトークンの期限通知を実装する

GraphAPIを実装する際に使用することが多いシークレットトークンですが、期限が近付いても通知する機能は現状ないようなのでそれを通知するプログラムをC#で実装したいと思います。以下のサイトを参考に実装していきます

参考サイト
Azure AD に連携している各種証明書、クライアント シークレットの有効期限の抽出方法 | Japan Azure Identity Support Blog
Azure AD に連携している各種証明書、クライアント シークレットの有効期限の抽出方法 | Japan Azure Identity Support Blog

こんにちは。Azure Identity チームの栗井です。 Azure AD の [アプリの登録] から各アプリに連携 ...

続きを読む

バージョン
OSWindows 11 Pro
C#.net 8.0
Azure.Identity1.11.3
Microsoft.Graph5.55.0

Azureアプリを登録する

Azureアプリを取得するためのAzureアプリを作成します。付与する権限はアプリケーション権限の「Application.Read.All」になります。
Azureアプリの作成手順は何度も紹介しているので以下を参考に作成して権限だけは変えてください

参考記事
エラー発生時にメールを送るようにしてみる(M365版)<準備編> - ナストンのまとめ
エラー発生時にメールを送るようにしてみる(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サイトが参考になります

MSサイト
Microsoft Entra ID オブジェクトの高度なクエリ機能 - Microsoft Graph | Microsoft Learn
Microsoft Entra ID オブジェクトの高度なクエリ機能 - Microsoft Graph | Microsoft Learn

Microsoft Entra ID オブジェクトは、データに効率的にアクセスするための詳細クエリ機能をサポートしていま ...

続きを読む

最後に

このようにすればシークレットトークンや証明書が期限切れになる前に通知を出すことができると思うので、利用してみてください
ただ、シークレットトークンは更新機能がなくシークレットトークンを新たに作成して、その値に置き換える必要があるので注意が必要です

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

お問い合わせ
お問い合わせ  | アドバンスド・ソリューション株式会社
お問い合わせ | アドバンスド・ソリューション株式会社

お問い合わせはこちら

-M365関連, 技術
-, ,