diff --git a/aspnetcore/includes/disableVer6.md b/aspnetcore/includes/disableVer6.md
index e83813a37f52..7aebf53dd78c 100644
--- a/aspnetcore/includes/disableVer6.md
+++ b/aspnetcore/includes/disableVer6.md
@@ -1,12 +1,16 @@
-
-### Disable default account verification when Account.RegisterConfirmation has been scaffolded
+### Disable default account verification when Account.RegisterConfirmation is scaffolded
-This section only applies when `Account.RegisterConfirmation` is scaffolded. Skip this section if you have not scaffolded `Account.RegisterConfirmation`.
+If `Account.RegisterConfirmation` is scaffolded, complete the instructions in this section.
-The user is redirected to the `Account.RegisterConfirmation` where they can select a link to have the account confirmed. The default `Account.RegisterConfirmation` is used ***only*** for testing, automatic account verification should be disabled in a production app.
+> [!IMPORTANT]
+> If `Account.RegisterConfirmation` is **not** scaffolded, skip the following instructions and continue to the next section.
-To require a confirmed account and prevent immediate login at registration, set `DisplayConfirmAccountLink = false` in the scaffolded `/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml.cs` file:
+The user is redirected to the `/Identity/Account/RegisterConfirmation` page where they can select a link to have the account confirmed. The default `Account.RegisterConfirmation` is used ***only*** for testing. Automatic account verification should be disabled in a production app.
+
+To require a confirmed account and prevent immediate sign in at registration, set `DisplayConfirmAccountLink = false` in the scaffolded _/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml.cs_ file:
[!code-csharp[](~/security/authentication/accconfirm/sample/RegisterConfirmation.cshtml.cs?highlight=63)]
-This step is only necessary when `Account.RegisterConfirmation` is scaffolded. The non-scaffolded [RegisterConfirmation](https://github.com/dotnet/aspnetcore/blob/1dcf7acfacf0fe154adcc23270cb0da11ff44ace/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/RegisterConfirmation.cshtml.cs#L74-L87) automatically detects when an [IEmailSender](https://github.com/dotnet/aspnetcore/blob/1dcf7acfacf0fe154adcc23270cb0da11ff44ace/src/Identity/UI/src/Areas/Identity/Services/EmailSender.cs) has been implemented and registered with the [dependency injection container](xref:fundamentals/dependency-injection).
+This step is necessary only when `Account.RegisterConfirmation` is scaffolded.
+
+The non-scaffolded [RegisterConfirmation](https://github.com/dotnet/aspnetcore/blob/1dcf7acfacf0fe154adcc23270cb0da11ff44ace/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/RegisterConfirmation.cshtml.cs#L74-L87) automatically detects when an [IEmailSender](https://github.com/dotnet/aspnetcore/blob/1dcf7acfacf0fe154adcc23270cb0da11ff44ace/src/Identity/UI/src/Areas/Identity/Services/EmailSender.cs) is implemented and registered with the [dependency injection container](xref:fundamentals/dependency-injection).
diff --git a/aspnetcore/includes/dotnet-tool-install-arch-options.md b/aspnetcore/includes/dotnet-tool-install-arch-options.md
index ce7f0af9841f..f63997e46c4e 100644
--- a/aspnetcore/includes/dotnet-tool-install-arch-options.md
+++ b/aspnetcore/includes/dotnet-tool-install-arch-options.md
@@ -1,3 +1,4 @@
> [!NOTE]
-> By default the architecture of the .NET binaries to install represents the currently running OS architecture. To specify a different OS architecture, see [dotnet tool install, --arch option](/dotnet/core/tools/dotnet-tool-install#options).
-> For more information, see GitHub issue [dotnet/AspNetCore.Docs #29262](https://github.com/dotnet/AspNetCore.Docs/issues/29262).
+> By default, the architecture of the .NET binaries to install represents the currently running operating system architecture.
+> To specify a different architecture, review how to use the `dotnet tool install` command with the ['--arch' option](/dotnet/core/tools/dotnet-tool-install#options).
+> For more information, see [GitHub dotnet/aspnetcore.docs issue #29262](https://github.com/dotnet/AspNetCore.Docs/issues/29262) - _Add '-a arm64' on Apple Silicon_.
diff --git a/aspnetcore/security/authentication/accconfirm.md b/aspnetcore/security/authentication/accconfirm.md
index e51c0b4c3b3b..ea0a21b27bb1 100644
--- a/aspnetcore/security/authentication/accconfirm.md
+++ b/aspnetcore/security/authentication/accconfirm.md
@@ -1,20 +1,22 @@
---
-title: Account confirmation and password recovery in ASP.NET Core
+title: Account confirmation and password recovery
author: wadepickett
description: Learn how to build an ASP.NET Core app with email confirmation and password reset.
ms.author: wpickett
ms.custom: sfi-image-nochange
monikerRange: '>= aspnetcore-3.1'
-ms.date: 2/9/2022
+ms.date: 05/11/2026
uid: security/authentication/accconfirm
+
+# customer intent: As an ASP.NET developer, I want to confirm user accounts and recover passwords, so I can verify user email addresses and allow password resets in my ASP.NET Core app.
---
# Account confirmation and password recovery in ASP.NET Core
By [Rick Anderson](https://twitter.com/RickAndMSFT), [Ponant](https://github.com/Ponant), and [Joe Audette](https://twitter.com/joeaudette)
-This tutorial shows how to build an ASP.NET Core app with email confirmation and password reset. This tutorial is **not** a beginning topic. You should be familiar with:
+This tutorial shows how to build an ASP.NET Core app with email confirmation and password reset. This tutorial is **not** a beginning article. You should be familiar with:
-* [ASP.NET Core](xref:tutorials/razor-pages/razor-pages-start)
+* [Razor Pages in ASP.NET Core](xref:tutorials/razor-pages/razor-pages-start)
* [Authentication](xref:security/authentication/identity)
* [Entity Framework Core](xref:data/ef-mvc/intro)
@@ -34,11 +36,11 @@ For Blazor guidance, which adds to or supersedes the guidance in this article, s
## Prerequisites
* [.NET 6 or later SDK](https://dotnet.microsoft.com/download/dotnet/6.0)
-* Successfully [send email from a C# console app](https://www.twilio.com/blog/send-emails-using-the-sendgrid-api-with-dotnetnet-6-and-csharp).
+* Successfully [send email from a C# console app by using the SendGrid API (Twilio)](https://www.twilio.com/blog/send-emails-using-the-sendgrid-api-with-dotnetnet-6-and-csharp)
## Create and test a web app with authentication
-Run the following commands to create a web app with authentication.
+Run the following commands to create a web app with authentication:
```dotnetcli
dotnet new webapp -au Individual -o WebPWrecover
@@ -46,34 +48,39 @@ cd WebPWrecover
dotnet run
```
-
+### Register a user with simulated email confirmation
-### Register user with simulated email confirmation
+Run the app, select the **Register** link, and register a user.
-Run the app, select the **Register** link, and register a user. Once registered, you are redirected to the to `/Identity/Account/RegisterConfirmation` page which contains a link to simulate email confirmation:
+After registration completes, you're redirected to the `/Identity/Account/RegisterConfirmation` page, which contains a link to simulate email confirmation.
-* Select the `Click here to confirm your account` link.
-* Select the **Login** link and sign-in with the same credentials.
-* Select the `Hello YourEmail@provider.com!` link, which redirects to the `/Identity/Account/Manage/PersonalData` page.
-* Select the **Personal data** tab on the left, and then select **Delete**.
+1. Select the `Click here to confirm your account` link.
+
+1. Select the **Login** link and sign-in with the same credentials.
+
+1. Select the `Hello YourEmail@provider.com!` link, which redirects to the `/Identity/Account/Manage/PersonalData` page.
-The `Click here to confirm your account` link is displayed because an [IEmailSender](https://github.com/dotnet/aspnetcore/blob/1dcf7acfacf0fe154adcc23270cb0da11ff44ace/src/Identity/UI/src/Areas/Identity/Services/EmailSender.cs) has not been implemented and registered with the [dependency injection container](xref:fundamentals/dependency-injection). See the [`RegisterConfirmation` source](https://github.com/dotnet/aspnetcore/blob/main/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/RegisterConfirmation.cshtml.cs#L71-L74).
+1. Select the **Personal data** tab, and then select **Delete**.
+
+The `Click here to confirm your account` link displays because the [IEmailSender](https://github.com/dotnet/aspnetcore/blob/1dcf7acfacf0fe154adcc23270cb0da11ff44ace/src/Identity/UI/src/Areas/Identity/Services/EmailSender.cs) interface isn't yet implemented and registered with the [dependency injection container](xref:fundamentals/dependency-injection). For more information, see the [RegisterConfirmation source](https://github.com/dotnet/aspnetcore/blob/main/src/Identity/UI/src/Areas/Identity/Pages/V4/Account/RegisterConfirmation.cshtml.cs#L71-L74).
[!INCLUDE[](~/includes/aspnetcore-repo-ref-source-links.md)]
### Configure an email provider
-In this tutorial, [SendGrid](https://sendgrid.com) is used to send email. A SendGrid account and key is needed to send email. We recommend using SendGrid or another email service to send email rather than SMTP. SMTP is difficult to secure and set up correctly.
+
-The SendGrid account may require [adding a Sender](https://sendgrid.com/docs/ui/sending-email/senders/).
+In this tutorial, Twilio [SendGrid](https://www.twilio.com/en-us/sendgrid) is used to send email. A SendGrid account and key are required to send email. We recommend using SendGrid or another email service to send email rather than SMTP. SMTP is difficult to secure and set up correctly.
-Create a class to fetch the secure email key. For this sample, create `Services/AuthMessageSenderOptions.cs`:
+The SendGrid account might require [adding a Sender](https://sendgrid.com/docs/ui/sending-email/senders/).
+
+Create a class to fetch the secure email key. For this sample, create the _Services/AuthMessageSenderOptions.cs_ file:
[!code-csharp[](accconfirm/sample/WebPWrecover60/Services/AuthMessageSenderOptions.cs)]
#### Configure SendGrid user secrets
-Set the `SendGridKey` with the [secret-manager tool](xref:security/app-secrets). For example:
+Set the `SendGridKey` value with the [secret-manager tool](xref:security/app-secrets). For example:
```dotnetcli
dotnet user-secrets set SendGridKey
@@ -81,9 +88,9 @@ dotnet user-secrets set SendGridKey
Successfully saved SendGridKey to the secret store.
```
-On Windows, Secret Manager stores keys/value pairs in a `secrets.json` file in the `%APPDATA%/Microsoft/UserSecrets/` directory.
+On Windows, Secret Manager stores keys/value pairs in a _secrets.json_ file in the `%APPDATA%/Microsoft/UserSecrets/` directory.
-The contents of the `secrets.json` file aren't encrypted. The following markup shows the `secrets.json` file. The `SendGridKey` value has been removed.
+The contents of the _secrets.json_ file aren't encrypted. The following markup shows the _secrets.json_ file. The `SendGridKey` value is removed from the example.
```json
{
@@ -91,7 +98,7 @@ The contents of the `secrets.json` file aren't encrypted. The following markup s
}
```
-For more information, see the [Options pattern](xref:fundamentals/configuration/options) and [configuration](xref:fundamentals/configuration/index).
+For more information, see the [Options pattern](xref:fundamentals/configuration/options) and .
### Install SendGrid
@@ -117,68 +124,80 @@ dotnet add package SendGrid
---
-See [Get Started with SendGrid for Free](https://sendgrid.com/free/) to register for a free SendGrid account.
+To register for a free SendGrid account, [start sending with a free SendGrid Email API trial](https://www.twilio.com/en-us/products/email-api/pricing).
### Implement IEmailSender
-To Implement `IEmailSender`, create `Services/EmailSender.cs` with code similar to the following:
+To implement the `IEmailSender` interface, create the _Services/EmailSender.cs_ file with code similar to the following example:
[!code-csharp[](accconfirm/sample/WebPWrecover60/Services/EmailSender.cs)]
-### Configure app to support email
+### Configure the app to support email
-Add the following code to the `Program.cs` file:
+Add the following code to the _Program.cs_ file, which performs the following tasks:
-* Add `EmailSender` as a transient service.
-* Register the `AuthMessageSenderOptions` configuration instance.
+* Adds the `EmailSender` instance as a transient service.
+* Registers the `AuthMessageSenderOptions` configuration instance.
[!code-csharp[](accconfirm/sample/WebPWrecover60/Program.cs?name=snippet1&highlight=2,5,18-19)]
-
-[!INCLUDE[](~/includes/disableVer6.md)]
+[!INCLUDE[Disable default account verification for scaffolded RegisterConfirmation](~/includes/disableVer6.md)]
## Register, confirm email, and reset password
Run the web app, and test the account confirmation and password recovery flow.
-* Run the app and register a new user
-* Check your email for the account confirmation link. See [Debug email](#debug) if you don't get the email.
-* Click the link to confirm your email.
-* Sign in with your email and password.
-* Sign out.
+1. Run the app and register a new user.
+
+1. Check your email for the account confirmation link. If you don't receive the email, see the [Debug email](#debug-email) section for troubleshooting.
+
+1. Select the link and confirm your email.
+
+1. Sign in with your email and password.
+
+1. Sign out.
### Test password reset
-* If you're signed in, select **Logout**.
-* Select the **Log in** link and select the **Forgot your password?** link.
-* Enter the email you used to register the account.
-* An email with a link to reset your password is sent. Check your email and click the link to reset your password. After your password has been successfully reset, you can sign in with your email and new password.
+1. If you're signed in, select **Logout**.
-
+1. Select the **Log in** link, and then select the **Forgot your password?** link.
+
+1. Enter the email you used to register the account. The app sends an email with a link to reset your password.
+
+1. Go to the sent email message.
+
+1. Select the link and reset your password.
+
+After your password successfully resets, you can sign in with your email and new password.
## Resend email confirmation
-Select the **Resend email confirmation** link on the **Login** page.
+This section describes the code that supports the email confirmation process and related tasks.
+
+* Start by selecting the **Resend email confirmation** link on the **Login** page.
### Change email and activity timeout
-The default inactivity timeout is 14 days. The following code sets the inactivity timeout to 5 days:
+The default inactivity timeout is 14 days. The following code sets the inactivity timeout to five days:
[!code-csharp[](accconfirm/sample/WebPWrecover60/Program.cs?name=snippet_timeout&highlight=21-24)]
### Change all data protection token lifespans
-The following code changes all data protection tokens timeout period to 3 hours:
+The following code changes the timeout period for all data protection tokens to three hours:
[!code-csharp[](accconfirm/sample/WebPWrecover60/Program.cs?name=snippet_dpt&highlight=21-22)]
-The built in Identity user tokens (see [AspNetCore/src/Identity/Extensions.Core/src/TokenOptions.cs](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Extensions.Core/src/TokenOptions.cs) )have a [one day timeout](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Core/src/DataProtectionTokenProviderOptions.cs).
+The built-in Identity user tokens (see the [AspNetCore/src/Identity/Extensions.Core/src/TokenOptions.cs](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Extensions.Core/src/TokenOptions.cs) source) have a [one day timeout](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Core/src/DataProtectionTokenProviderOptions.cs).
### Change the email token lifespan
-The default token lifespan of [the Identity user tokens](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Extensions.Core/src/TokenOptions.cs) is [one day](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Core/src/DataProtectionTokenProviderOptions.cs). This section shows how to change the email token lifespan.
+The default token lifespan of [the Identity user tokens](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Extensions.Core/src/TokenOptions.cs) is [one day](https://github.com/dotnet/AspNetCore/blob/v2.2.2/src/Identity/Core/src/DataProtectionTokenProviderOptions.cs).
-Add a custom and :
+The following code shows how to change the email token lifespan.
+
+Add a custom class and class:
[!code-csharp[](accconfirm/sample/WebPWrecover60/TokenProviders/CustomTokenProvider.cs?name=snippet1)]
@@ -186,44 +205,60 @@ Add the custom provider to the service container:
[!code-csharp[](accconfirm/sample/WebPWrecover60/Program.cs?name=snippet_etl&highlight=18-24)]
-
-
### Debug email
-If you can't get email working:
+If the email process isn't working as expected, try these troubleshooting steps:
+
+* Set a breakpoint in the `EmailSender.Execute` method and verify the `SendGridClient.SendEmailAsync` method is called.
+
+* Create a [console app to send email](https://www.twilio.com/docs/sendgrid/for-developers/sending-email/v2-csharp-code-example) by using similar code to `EmailSender.Execute`.
+
+* Review the [Email Activity](https://www.twilio.com/docs/sendgrid/ui/analytics-and-reporting/email-activity-feed) page.
-* Set a breakpoint in `EmailSender.Execute` to verify `SendGridClient.SendEmailAsync` is called.
-* Create a [console app to send email](https://sendgrid.com/docs/Integrate/Code_Examples/v2_Mail/csharp.html) using similar code to `EmailSender.Execute`.
-* Review the [Email Activity](https://sendgrid.com/docs/User_Guide/email_activity.html) page.
* Check your spam folder.
-* Try another email alias on a different email provider (Microsoft, Yahoo, Gmail, etc.)
+
+* Try another email alias on a different email provider, such as Microsoft, Yahoo, Gmail, and so on.
+
* Try sending to different email accounts.
-**A security best practice** is to **not** use production secrets in test and development. If you publish the app to Azure, set the SendGrid secrets as application settings in the Azure Web App portal. The configuration system is set up to read keys from environment variables.
+> [!TIP]
+> **A security best practice** is to **not** use production secrets in test and development. If you publish the app to Azure, set the SendGrid secrets as application settings in the Azure Web App portal. The configuration system is set up to read keys from environment variables.
## Combine social and local login accounts
-To complete this section, you must first enable an external authentication provider. See [Facebook, Google, and external provider authentication](xref:security/authentication/social/index).
+To complete this section, you must first enable an external authentication provider. For more information, see .
-You can combine local and social accounts by clicking on your email link. In the following sequence, "RickAndMSFT@gmail.com" is first created as a local login; however, you can create the account as a social login first, then add a local login.
+In this sequence, the email address `RickAndMSFT@gmail.com` is first created as a local login. However, you can create the account as a social login first, and then add a local login.
-
+1. To combine local and social accounts, select the email address link.
-Click on the **Manage** link. Note the 0 external (social logins) associated with this account.
+ :::image type="content" source="accconfirm/_static/rick.png" border="false" alt-text="Screenshot that shows how to select the email address link for the authenticated user in the web app.":::
-
+1. In the **Manage your account** page, select the **Manage** link.
-Click the link to another login service and accept the app requests. In the following image, Facebook is the external authentication provider:
+ Notice there are currently zero (0) external (social logins) associated with the authenticated account.
-
+ :::image type="content" source="accconfirm/_static/manage.png" border="false" alt-text="Screenshot that shows zero external (social logins) associated with the authenticated account. The Management link is highlighted.":::
-The two accounts have been combined. You are able to sign in with either account. You might want your users to add local accounts in case their social login authentication service is down, or more likely they've lost access to their social account.
+1. In the **Manage your external logins** page, select the link to another login service. Follow the service prompts and accept the app requests.
+
+ In the following image, Facebook is added as an external authentication provider:
+
+ :::image type="content" source="accconfirm/_static/fb.png" border="false" alt-text="Screenshot that shows Facebook added as an external (social) login for the authenticated account.":::
+
+Authentication for the user email address now combines local and external (social) accounts. The user can sign in with either account.
+
+> [!TIP]
+> It's a good practice to recommend your users to add a local account to your app. This approach can help ensure continued access in case their social login authentication service is down, or they lose access to their social account.
## Enable account confirmation after a site has users
-Enabling account confirmation on a site with users locks out all the existing users. Existing users are locked out because their accounts aren't confirmed. To work around existing user lockout, use one of the following approaches:
+If you enable account confirmation on a site with existing users, you lock them out because their accounts aren't confirmed.
+
+To work around the issue of existing user lockout, use one of the following approaches:
+
+* Update the database to mark all existing users as confirmed.
-* Update the database to mark all existing users as being confirmed.
* Confirm existing users. For example, batch-send emails with confirmation links.
:::moniker-end
@@ -424,3 +459,9 @@ Enabling account confirmation on a site with users locks out all the existing us
* Confirm existing users. For example, batch-send emails with confirmation links.
:::moniker-end
+
+## Related content
+
+* [Razor Pages in ASP.NET Core](xref:tutorials/razor-pages/razor-pages-start)
+* [Authentication](xref:security/authentication/identity)
+* [Entity Framework Core](xref:data/ef-mvc/intro)
diff --git a/aspnetcore/security/authentication/accconfirm/_static/fb.png b/aspnetcore/security/authentication/accconfirm/_static/fb.png
index e9a134f6c2d8..fc5200eec597 100644
Binary files a/aspnetcore/security/authentication/accconfirm/_static/fb.png and b/aspnetcore/security/authentication/accconfirm/_static/fb.png differ
diff --git a/aspnetcore/security/authentication/accconfirm/_static/manage.png b/aspnetcore/security/authentication/accconfirm/_static/manage.png
index 6e5ad418e819..1cd32708618a 100644
Binary files a/aspnetcore/security/authentication/accconfirm/_static/manage.png and b/aspnetcore/security/authentication/accconfirm/_static/manage.png differ
diff --git a/aspnetcore/security/authentication/accconfirm/_static/rick.png b/aspnetcore/security/authentication/accconfirm/_static/rick.png
index 80704719686d..28ddefda2413 100644
Binary files a/aspnetcore/security/authentication/accconfirm/_static/rick.png and b/aspnetcore/security/authentication/accconfirm/_static/rick.png differ
diff --git a/aspnetcore/security/authentication/jwt-authn.md b/aspnetcore/security/authentication/jwt-authn.md
index 71dcca3ca9c1..7f3db309e80a 100644
--- a/aspnetcore/security/authentication/jwt-authn.md
+++ b/aspnetcore/security/authentication/jwt-authn.md
@@ -1,19 +1,23 @@
---
title: Generate tokens with dotnet user-jwts
author: tdykstra
-description: Learn how to set up manage JSON Web Tokens in development with dotnet user-jwts
+description: Learn how to generate and manage JSON Web Tokens in development with the dotnet user-jwts command.
monikerRange: '>= aspnetcore-7.0'
ms.author: tdykstra
-ms.date: 09/22/2018
+ms.date: 05/11/2026
ms.custom: mvc
uid: security/authentication/jwt
+
+# customer intent: As an ASP.NET developer, I want to use the dotnet user-jwts command, so I can generate and manage JSON Web Tokens in development.
---
# Manage JSON Web Tokens in development with dotnet user-jwts
By [Rick Anderson](https://twitter.com/RickAndMSFT)
-The `dotnet user-jwts` command line tool can create and manage app specific local [JSON Web Tokens](https://jwt.io/introduction) (JWTs).
+The `dotnet user-jwts` command line tool can create and manage app specific local [JSON Web Tokens](https://www.jwt.io/introduction#what-is-json-web-token) (JWTs).
+
+This article provides syntax details for the command and examples.
## Synopsis
@@ -30,9 +34,9 @@ Creates and manages project specific local JSON Web Tokens.
`PROJECT | SOLUTION`
-The MSBuild project to apply a command on. If a project is not specified, MSBuild searches the current working directory for a file that has a file extension that ends in *proj* and uses that file.
+The MSBuild project to apply a command on. If a project isn't specified, MSBuild searches the current working directory for a file that has a file extension that ends in *proj*. It then uses that file to obtain the project information for the command.
-
+
Add the [SeedData](https://github.com/dotnet/AspNetCore.Docs/tree/main/aspnetcore/security/authorization/secure-data/samples/starter6/Data/SeedData.cs) class to the *Data* folder:
[!code-csharp[](secure-data/samples/starter6/Data/SeedData.cs)]
-Call `SeedData.Initialize` from `Program.cs`:
+Call the `SeedData.Initialize` method from the _Program.cs_ file:
[!code-csharp[](secure-data/samples/starter6/Program.cs?highlight=18-23)]
-Test that the app seeded the database. If there are any rows in the contact DB, the seed method doesn't run.
+Test the app and confirm the database is seeded. If there are any rows in the contact database, the seed method doesn't run.
:::moniker-end
@@ -750,11 +754,9 @@ Test that the app seeded the database. If there are any rows in the contact DB,
:::moniker-end
-
-
-### Additional resources
+## Related content
* [Tutorial: Build an ASP.NET Core and Azure SQL Database app in Azure App Service](/azure/app-service/tutorial-dotnetcore-sqldb-app)
-* [ASP.NET Core Authorization Lab](https://github.com/blowdart/AspNetAuthorizationWorkshop). This lab goes into more detail on the security features introduced in this tutorial.
+* [ASP.NET Core Authorization Lab](https://github.com/blowdart/AspNetAuthorizationWorkshop) (extended details on security features)
*
* [Custom policy-based authorization](xref:security/authorization/policies)
diff --git a/aspnetcore/security/authorization/secure-data/_static/admin.png b/aspnetcore/security/authorization/secure-data/_static/admin.png
index 6fa0245b73b4..e3f435a26add 100644
Binary files a/aspnetcore/security/authorization/secure-data/_static/admin.png and b/aspnetcore/security/authorization/secure-data/_static/admin.png differ
diff --git a/aspnetcore/security/authorization/secure-data/_static/manager.png b/aspnetcore/security/authorization/secure-data/_static/manager.png
index d32add66b75d..3a40b46add4d 100644
Binary files a/aspnetcore/security/authorization/secure-data/_static/manager.png and b/aspnetcore/security/authorization/secure-data/_static/manager.png differ
diff --git a/aspnetcore/security/authorization/secure-data/_static/manager1.png b/aspnetcore/security/authorization/secure-data/_static/manager1.png
index 5db61fa9870f..f3b7a80afe8d 100644
Binary files a/aspnetcore/security/authorization/secure-data/_static/manager1.png and b/aspnetcore/security/authorization/secure-data/_static/manager1.png differ
diff --git a/aspnetcore/security/authorization/secure-data/_static/rick.png b/aspnetcore/security/authorization/secure-data/_static/rick.png
index c7c271abdbcd..6fb2a22ee1d9 100644
Binary files a/aspnetcore/security/authorization/secure-data/_static/rick.png and b/aspnetcore/security/authorization/secure-data/_static/rick.png differ