このサンプルでは、 DefaultAzureCredential フローで Microsoft Entra ID 認証を使用して、ASP.NET Core Web API を Azure Managed Redis に接続する方法を示します。 このアプリケーションは、トークンベースの Microsoft Entra ID アクセスを優先して、従来の接続文字列ベースの認証を回避します。これは、最新のセキュリティのベスト プラクティスに準拠しています。
アプリケーションは、次の最小限の ASP.NET Core 8.0 Web API です。
- 起動時に Azure Managed Redis へのセキュリティで保護された認証済み接続を確立します。
- キャッシュにデータを読み書きする単純な REST エンドポイントを公開します。
- 依存関係の挿入を使用した Redis 接続ライフサイクルの適切な管理を示します。
GitHub のコードにスキップする
GitHub で Microsoft.Azure.StackExchangeRedis リポジトリを複製します。
[前提条件]
- .NET 8.0 SDK。
- Azure サブスクリプションにプロビジョニングされた Azure Managed Redis インスタンス。
- Azure ユーザーまたはサービス プリンシパルを Redis ユーザーとしてキャッシュに追加する必要があります。 Azure portal で、[リソース] メニューの [認証 ] に移動し、[ ユーザーまたはサービス プリンシパル] を選択して、ID を追加します。
- ローカル開発認証用の Azure CLI。
必須の NuGet パッケージ
| パッケージ | 目的 |
|---|---|
Microsoft.Azure.StackExchangeRedis |
Azure Managed Redis に対する Microsoft Entra ID トークンベースの認証を有効にする StackExchange.Redis の拡張メソッド |
StackExchange.Redis |
.NET 用の基になる Redis クライアント ライブラリ |
Azure.Identity |
Azure サービスで認証するための DefaultAzureCredential とその他の資格情報の種類を提供します |
Swashbuckle.AspNetCore |
API ドキュメントとテストのための Swagger/OpenAPI サポート |
プライマリ パッケージをインストールします。
dotnet add package Microsoft.Azure.StackExchangeRedis
このパッケージは、依存関係として StackExchange.Redis と Azure.Identity を取り込みます。
コンフィギュレーション
アプリケーションは、構成から Redis エンドポイントを読み取ります。 以下を更新します。appsettings.Development.json:
{
"Redis": {
"Endpoint": "<your-redis-name>.<region>.redis.azure.net:10000"
}
}
注
Azure Managed Redis では、既定でポート 10000 が使用されます。 エンドポイントの形式は <cache-name>.<region>.redis.azure.net:10000に従います。
認証フロー
ローカル開発
アプリケーションをローカルで実行する前に、Azure で認証します。
az login
DefaultAzureCredentialは、Azure CLI 資格情報を自動的に取得し、それらを使用して Redis リソースのアクセス トークンを取得します。 この方法では、シークレットをローカルで管理またはローテーションする必要がなくなります。
運用環境
App Service、Container Apps、AKS などの Azure でホストされる環境では、 DefaultAzureCredential では次が使用されます。
- マネージド ID - システム割り当てまたはユーザー割り当て
- ワークロード アイデンティティ - Kubernetes シナリオ用
- 環境変数 - サービス プリンシパル認証用
コードを変更する必要はありません。 同じ DefaultAzureCredential が環境にシームレスに適応します。
アーキテクチャ
Redis サービス (Services/Redis.cs)
Redis クラスは、接続のライフサイクルを管理します。
var options = new ConfigurationOptions()
{
EndPoints = { endpoint },
LoggerFactory = _loggerFactory,
};
await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
_connection = await ConnectionMultiplexer.ConnectAsync(options);
重要なポイント:
-
ConfigureForAzureWithTokenCredentialAsyncは、トークン ベースの認証を設定するMicrosoft.Azure.StackExchangeRedisからの拡張メソッドです -
DefaultAzureCredentialトークンの取得と更新を自動的に処理する - アプリは起動時に 1 回接続を確立し、要求間で共有します
依存関係の挿入 (Program.cs)
アプリは Redis サービスをシングルトンとして登録し、起動時に初期化します。
builder.Services.AddSingleton<Redis>();
// Initialize Redis connection
using (var scope = app.Services.CreateScope())
{
var redis = scope.ServiceProvider.GetRequiredService<Redis>();
var endpoint = app.Configuration.GetValue<string>("Redis:Endpoint");
await redis.ConnectAsync(endpoint);
}
API コントローラー (Controllers/SampleController.cs)
コントローラーは、 Redis サービスを挿入し、基本的なキャッシュ操作を示します。
-
GET
/Sample: キャッシュから以前のアクセス タイムスタンプを読み取り、現在の時刻で更新します
アプリケーションの実行
認証されていることを確認します。
az loginappsettings.Development.jsonで Redis エンドポイントを更新します。アプリケーションを実行します。
dotnet runhttps://localhost:<port>/swaggerに移動して Swagger UI にアクセスします。
想定される出力
GET /Sample エンドポイントを呼び出すとき:
最初の要求:
Previous visit was at:
(Empty value since no previous visit exists)
**Subsequent requests:**
Previous visit was at: 2026-01-30T14:23:45
(Returns the ISO 8601 formatted timestamp of the previous request)
コンソール ログには、次の情報が表示されます。
info: Microsoft.Azure.StackExchangeRedis.Sample.AspNet.Controllers.SampleController
Handled GET request. Previous visit time: 2026-01-30T14:23:45
主要な実装の詳細
トークンの更新:
Microsoft.Azure.StackExchangeRedisライブラリでは、有効期限が切れる前にトークンが自動的に更新されるため、更新を手動で処理する必要はありません。接続の回復性: StackExchange.Redis からの
ConnectionMultiplexerは、再接続ロジックを単独で管理します。リソースのクリーンアップ:
Redisサービスは、アプリケーションのシャットダウン時に接続を適切に閉じるIDisposableを実装します。ログの統合: Redis クライアントは .NET の
ILoggerFactoryと連携して統合的なログ出力を行います。
トラブルシューティング
| 問題点 | 解決策 |
|---|---|
No connection is available |
エンドポイントの形式とポート (10000) を確認します。 Redis インスタンスがプロビジョニングされ、アクセス可能であることを確認します。 |
AuthenticationFailedException |
az loginを実行して資格情報を更新します。 [リソース] メニューの [ 認証 ] で、ID が Redis ユーザーとして追加されていることを確認します。 |
Unauthorized |
Microsoft Entra ID ID が Azure Managed Redis インスタンスの Redis ユーザーとして追加されていることを確認します。 詳細については、「キャッシュ認証に Microsoft Entra ID を使用する」を参照してください。 |