Winforms アプリケーションで Azure Key Vault を使用したいと考えています。アプリを Azure Active Directory に追加し、powershell を使用してキー コンテナーにシークレットを作成することができました。アプリはシークレットを使用するために認証されます。残念ながら、winforms アプリでシークレットを使用することはできません。私は例外を受け取ります:
*sts_token_request_failed: セキュリティ トークン サービスへのトークン要求が失敗しました。詳細については、InnerException を確認してください。
InnerException: AADSTS70002: 資格情報の検証中にエラーが発生しました。AADSTS50012: 無効なクライアント シークレットが指定されました。*
構成:
<appSettings>
<add key="ClientId" value="<appId>" />
<add key="ClientSecret" value="<nameofsecret>" />
<add key="SecretUri" value="https://<vaultname>.vault.azure.net/secrets/<nameofsecret>" />
</appSettings>
私のコードは次のとおりです。
public static string GetSecret()
{
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
var sec = kv.GetSecretAsync(ConfigurationManager.AppSettings["SecretUri"]).Result.Value;
return sec;
}
public async static Task<string> GetToken(string authority, string resource, string scope)
{
var authContext = new AuthenticationContext(authority,true);
ClientCredential clientCred = new ClientCredential(ConfigurationManager.AppSettings["ClientId"],
ConfigurationManager.AppSettings["ClientSecret"]);
try
{
AuthenticationResult result = authContext.AcquireToken(resource, clientCred);
if (result == null)
throw new InvalidOperationException("Failed to obtain the JWT token");
return result.AccessToken;
}
catch (Exception ex)
{
return String.Empty;
}
}
マニフェストまたは app.config で何か変更する必要がありますか? secretName とは何ですか? powershellで作ったシークレットの名前ですか?ネイティブ クライアント アプリケーションでは、アクティブ ディレクトリにキーを追加するための「構成」タブがありません。これが問題ではないでしょうか?