Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .openpublishing.redirection.azure.json
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,10 @@
{
"source_path_from_root": "/docs/azure/sdk/azure-sdk-configure-proxy.md",
"redirect_url": "/dotnet/azure/sdk/configure-proxy"
},
{
"source_path_from_root": "/docs/azure/sdk/authentication/authentication-best-practices.md",
"redirect_url": "/dotnet/azure/sdk/authentication/best-practices"
}
]
}
2 changes: 1 addition & 1 deletion docs/azure/TOC.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
- name: Credential chains
href: ./sdk/authentication/credential-chains.md
- name: Best practices
href: ./sdk/authentication/authentication-best-practices.md
href: ./sdk/authentication/best-practices.md
- name: ASP.NET Core guidance
href: ./sdk/aspnetcore-guidance.md
- name: Resource management
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ The recommended credential reuse strategy differs by .NET application type.

Implement credential reuse through the `UseCredential` method of `Microsoft.Extensions.Azure`:

:::code language="csharp" source="../snippets/authentication/best-practices/Program.cs" id="snippet_credential_reuse_Dac" highlight="6" :::
:::code language="csharp" source="../snippets/authentication/best-practices/Program.cs" id="snippet_credential_reuse_AspNetCore" highlight="12" :::

For information on this approach, see [Authenticate using Microsoft Entra ID](/dotnet/azure/sdk/aspnetcore-guidance?tabs=api#authenticate-using-microsoft-entra-id).

# [Other](#tab/other)

:::code language="csharp" source="../snippets/authentication/best-practices/Program.cs" id="snippet_credential_reuse_noDac" highlight="8, 12" :::
:::code language="csharp" source="../snippets/authentication/best-practices/Program.cs" id="snippet_credential_reuse_nonAspNetCore" highlight="8, 12" :::

---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,29 @@
using Azure.Storage.Blobs;
using Microsoft.Extensions.Azure;

var userAssignedClientId = "<user-assigned-client-id>";
var clientId = "<user-assigned-client-id>";
var builder = WebApplication.CreateBuilder(args);

#region snippet_credential_reuse_Dac
#region snippet_credential_reuse_AspNetCore
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddSecretClient(new Uri("<key-vault-url>"));
clientBuilder.AddBlobServiceClient(new Uri("<blob-storage-url>"));

clientBuilder.UseCredential(new DefaultAzureCredential());
string clientId = builder.Configuration["UserAssignedClientId"]!;
ChainedTokenCredential credentialChain = new(
new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedClientId(clientId)),
new VisualStudioCredential());

clientBuilder.UseCredential(credentialChain);
});
#endregion snippet_credential_reuse_Dac
#endregion snippet_credential_reuse_AspNetCore

#region snippet_credential_reuse_noDac
#region snippet_credential_reuse_nonAspNetCore
ChainedTokenCredential credentialChain = new(
new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedClientId(userAssignedClientId)),
ManagedIdentityId.FromUserAssignedClientId(clientId)),
new VisualStudioCredential());

BlobServiceClient blobServiceClient = new(
Expand All @@ -29,11 +35,11 @@
SecretClient secretClient = new(
new Uri("<key-vault-url>"),
credentialChain);
#endregion snippet_credential_reuse_noDac
#endregion snippet_credential_reuse_nonAspNetCore

#region snippet_retries
ManagedIdentityCredentialOptions miCredentialOptions = new(
ManagedIdentityId.FromUserAssignedClientId(userAssignedClientId)
ManagedIdentityId.FromUserAssignedClientId(clientId)
)
{
Retry =
Expand Down