次の方法で共有


クイック スタート: .NET Core で Azure Managed Redis を使用する

この .NET 8 コンソール アプリケーションは、Microsoft Entra ID 認証を使用して Azure Managed Redis に接続する方法を示しています。 重要な価値提案は、自動トークン更新による パスワードレス認証 であり、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 StackExchange.Redis に Microsoft Entra ID 認証を追加する拡張機能ライブラリ
Azure.Identity DefaultAzureCredentialおよびその他の Azure ID 実装を提供します
StackExchange.Redis 基になる Redis クライアント (依存関係として取り込まれた)
Microsoft.Extensions.Logging.Console コンソールのログ記録による診断

認証方法

この拡張機能では複数の ID の種類がサポートされ、それぞれに対応する ConfigureForAzure*() 拡張メソッドがあります。

  1. DefaultAzureCredential - 推奨されるアプローチ。 複数の資格情報ソース (環境変数、マネージド ID、Azure CLI 認証、Visual Studio 資格情報など) をチェーンし、最初に機能するものを使用します。 ローカルと Azure の両方で実行されるコードに最適です。

  2. User-Assigned マネージド ID - クライアント ID を指定し、Azure でホストされるアプリがどのマネージド ID を使用するかを明示的に指定する場合。

  3. System-Assigned マネージド ID - リソースに自動的に割り当てられた ID を使用する Azure でホストされるアプリの場合。

  4. サービス プリンシパル (シークレット) - 自動化されたシナリオまたは CI シナリオのクライアント ID、テナント ID、シークレット。

  5. サービス プリンシパル (証明書) - セキュリティを強化するためのクライアント ID、テナント ID、X.509 証明書。

ローカルでの DefaultAzureCredential のしくみ

ローカルで開発する場合、 DefaultAzureCredential は次の方法を使用して認証を試みます。

az login

この方法では、Microsoft Entra ID アカウントを使用して Azure CLI にサインインします。 SDK はキャッシュされた資格情報を検出し、それらを使用してトークンを取得します。 Azure Portal の [リソース] メニューの [認証] を使用して、Microsoft Entra ID ユーザーを Azure Managed Redis リソースの Redis ユーザーとして構成する必要があります。

主要な実装パターン

接続の構成:

ConfigurationOptions configurationOptions = new()
{
    Protocol = RedisProtocol.Resp3,  // Recommended for seamless re-auth
    LoggerFactory = loggerFactory,
    AbortOnConnectFail = true,       // Fail fast (use false in production)
    BacklogPolicy = BacklogPolicy.FailFast
};

Entra ID のセットアップ:

await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());
var connection = await ConnectionMultiplexer.ConnectAsync(configurationOptions);

Redis の基本的な操作:

var database = connection.GetDatabase();
await database.StringSetAsync("key", "value");
var value = await database.StringGetAsync("key");

トークンのライフサイクルと自動再認証

拡張機能は、OAuth2 トークンのライフサイクルを自動的に処理します。

  1. 初期取得 - 接続する前にトークンを取得します。
  2. プロアクティブ更新 - トークンの有効期限が切れる前 (約 1 時間) は、バックグラウンドで新しいトークンを取得します。
  3. 再認証 - コマンドを削除せずに、新しいトークンを使用して接続を再認証します。

監視のために、トークン イベントをサブスクライブできます。

Event 目的
TokenRefreshed 取得された新しいトークン
TokenRefreshFailed トークンの更新に失敗しました (引き続き古いトークンを使用)
ConnectionReauthenticated 接続が正常に再認証されました
ConnectionReauthenticationFailed 接続の再認証に失敗しました

RESP3 プロトコルと RESP2 プロトコル

このサンプルでは、次の理由から RESP3 (Protocol = RedisProtocol.Resp3) を使用しています。

  • RESP2 では、対話型コマンドと pub/sub 用に個別の接続が作成されます。
  • 対話型接続のみが事前に再認証されます。
  • Pub/sub 接続はトークンの有効期限が切れると閉じ、短時間の中断が発生します。
  • RESP3 は 1 つの接続ですべてを多重化し、これらの中断を回避します。

Azure の前提条件

  1. Azure Managed Redis インスタンスを作成します。
  2. [データ アクセス構成] で Microsoft Entra ID 認証を有効にします。
  3. 適切なアクセス許可 (データ所有者、データ共同作成者など) を使用して、ID を Redis ユーザーとして追加します。
  4. ローカルでを実行し、Entra ID アカウントで認証します。

Redis の基本的な概念

概念 Description
ConnectionMultiplexer Redisへのスレッドセーフ性を持つシングルトン接続プール。 1 回作成し、アプリの有効期間中に再利用します。
IDatabase コマンドを実行するためのインターフェイス (StringGetStringSetHashGetなど)。
エンドポイントの形式 endpoint:10000 (TLS) を使用して Azure Managed Redis を使用できます。

サンプルの実行

az login
cd sample
dotnet run

Redis エンドポイント ( <your-redis-name>.<region>.redis.azure.net:10000 など) を入力し、認証方法 1 (DefaultAzureCredential) を選択し、コマンドが成功するたびに 1 秒ごとに + 文字が出力されるのを確認します。 60 分以上実行して、トークンの自動更新が機能することを確認します。

実稼働に関する考慮事項

Setting サンプル値 生産価値
AbortOnConnectFail true false (起動時に再試行)
BacklogPolicy FailFast Default (一時的な障害時のキュー コマンド)
接続の有効期間 デモ ループ DI 経由のシングルトン (IConnectionMultiplexer)

このサンプルでは、Azure Managed Redis を使用するすべての .NET アプリケーションで、セキュリティで保護されたパスワードレス Entra ID 認証の完全なリファレンス実装を提供します。