I think I'm having difficulty understanding authentication for public client applications, specifically in relation to the Azure key vault.
I've been able to write some C# which builds a public client application, registered with Azure, and I can authenticate using a broker and my Windows domain login to get an oauth token without having to provide any password. I've successfully used that oauth token to call the RESTful API for the key vault, and have retrieved some secrets. I've used RBAC to grant the necessary permissions.
However, I know I'm supposed to use SecretClient to accomplish this. SecretClient requires a credential, but what I have is an oauth token. How can I create a credential that uses my oauth token?
I've been playing with the DefaultAzureCredential object, but I've only been able to get this working with environment variables (using a confidential client, which isn't what I want), or with my Visual Studio credentials. This then doesn't work on the test PC.
Any assistance would be greatly appreciated!
Below is an example of the code I thought would work on a domain joined PC where the user is logged in with their Entra ID.
string tenantId = "<my tenant>";
DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions();
options.TenantId = tenantId;
options.ExcludeEnvironmentCredential = true;
DefaultAzureCredential credential = new DefaultAzureCredential(options);
SecretClient client = new SecretClient(new Uri("https://mykeyvault.vault.azure.net/"), credential);
string secretValue = client.GetSecret("mysecret").Value.Value;
MessageBox.Show(secretValue);
According to this MS-Document, it is not possible to access
SecretClientwithout credentials.The
SecretClientrequires a credential to authenticate with the Azure service, withDefaultAzureCredentialorClientSecretCredential.In
ClientSecretCredential, you also need to pass clientId, clientSecret, and tenantId to fetch the secrets from KeyVault.Code:
As of now, you need to use PCA (OAuth token) flow only.
Reference: Azure Key Vault secret client library for .NET - Azure for .NET Developers | Microsoft Learn