Configure authentication in an Azure Web App configuration file by using Azure AD B2C

This article explains how to add Azure Active Directory B2C (Azure AD B2C) authentication functionality to an Azure Web App. For more information, check out the File-based configuration in Azure App Service authentication article.

Overview

OpenID Connect (OIDC) is an authentication protocol that's built on OAuth 2.0. Use the OIDC to securely sign users in to an Azure Web App. The sign-in flow involves the following steps:

  1. Users go to the Azure Web App and select Sign-in.
  2. The Azure Web App initiates an authentication request and redirects users to Azure AD B2C.
  3. Users sign up or sign in and reset the password. Alternatively, they can sign in with a social account.
  4. After users sign in successfully, Azure AD B2C returns an ID token to the Azure Web App.
  5. Azure Web App validates the ID token, reads the claims, and returns a secure page to users.

When the ID token expires or the app session is invalidated, Azure Web App initiates a new authentication request and redirects users to Azure AD B2C. If the Azure AD B2C SSO session is active, Azure AD B2C issues an access token without prompting users to sign in again. If the Azure AD B2C session expires or becomes invalid, users are prompted to sign in again.

Prerequisites

  • If you haven't created an app yet, follow the guidance how to create an Azure Web App.

Step 1: Configure your user flow

When users try to sign in to your app, the app starts an authentication request to the authorization endpoint via a user flow. The user flow defines and controls the user experience. After users complete the user flow, Azure AD B2C generates a token and then redirects users back to your application.

If you haven't done so already, create a user flow or a custom policy. Repeat the steps to create three separate user flows as follows:

  • A combined Sign in and sign up user flow, such as susi. This user flow also supports the Forgot your password experience.
  • A Profile editing user flow, such as edit_profile.
  • A Password reset user flow, such as reset_password.

Azure AD B2C prepends B2C_1_ to the user flow name. For example, susi becomes B2C_1_susi.

Step 2: Register a web application

To enable your application to sign in with Azure AD B2C, register your app in the Azure AD B2C directory. The app that you register establishes a trust relationship between the app and Azure AD B2C.

During app registration, you'll specify the redirect URI. The redirect URI is the endpoint to which users are redirected by Azure AD B2C after they authenticate with Azure AD B2C. The app registration process generates an application ID, also known as the client ID, that uniquely identifies your app. After your app is registered, Azure AD B2C uses both the application ID and the redirect URI to create authentication requests. You also create a client secret, which your app uses to securely acquire the tokens.

Step 2.1: Register the app

To register your application, follow these steps:

  1. Sign in to the Azure portal.

  2. Make sure you're using the directory that contains your Azure AD B2C tenant. Select the Directories + subscriptions icon in the portal toolbar.

  3. On the Portal settings | Directories + subscriptions page, find your Azure AD B2C directory in the Directory name list, and then select Switch.

  4. In the Azure portal, search for and select Azure AD B2C.

  5. Select App registrations, and then select New registration.

  6. Under Name, enter a name for the application (for example, My Azure web app).

  7. Under Supported account types, select Accounts in any identity provider or organizational directory (for authenticating users with user flows).

  8. Under Redirect URI, select Web and then, in the URL box, enter https://<YOUR_SITE>/.auth/login/aadb2c/callback. Replace the <YOUR_SITE> with your Azure Web App name. For example: https://contoso.azurewebsites.net/.auth/login/aadb2c/callback. If you configured an Azure Web App's custom domains, user the custom domain in the redirect URI. For example, https://www.contoso.com/.auth/login/aadb2c/callback

  9. Under Permissions, select the Grant admin consent to openid and offline access permissions checkbox.

  10. Select Register.

  11. Select Overview.

  12. Record the Application (client) ID for later use, when you configure the web application.

    Screenshot of the web app Overview page for recording your web application I D.

Step 2.2: Create a client secret

  1. In the Azure AD B2C - App registrations page, select the application you created, for example My Azure web app.
  2. In the left menu, under Manage, select Certificates & secrets.
  3. Select New client secret.
  4. Enter a description for the client secret in the Description box. For example, clientsecret1.
  5. Under Expires, select a duration for which the secret is valid, and then select Add.
  6. Record the secret's Value for use in your client application code. This secret value is never displayed again after you leave this page. You use this value as the application secret in your application's code.

Step 3: Configure the Azure Web App

Once the application is registered with Azure AD B2C, create the following application secrets in the Azure Web App's application settings. You can configure application settings via the Azure portal or with the Azure CLI. For more information, check out the File-based configuration in Azure App Service authentication article.

Add the following keys to the app settings:

Setting Name Value
AADB2C_PROVIDER_CLIENT_ID The Web App (client) ID from step 2.1.
AADB2C_PROVIDER_CLIENT_SECRET The Web App (client) secret from step 2.2.

Important

Application secrets are sensitive security credentials. Do not share this secret with anyone. Don't distribute it within a client application, or check in into a source control.

3.1 Add an OpenID Connect identity provider

Once you've the added the app ID and secret, use the following steps to add the Azure AD B2C as OpenId Connect identity provider.

  1. Add an auth section of the configuration file with a configuration block for the OIDC providers, and your provider definition.

    {
      "auth": {
        "identityProviders": {
          "customOpenIdConnectProviders": {
            "aadb2c": {
              "registration": {
                "clientIdSettingName": "AADB2C_PROVIDER_CLIENT_ID",
                "clientCredential": {
                  "clientSecretSettingName": "AADB2C_PROVIDER_CLIENT_SECRET"
                },
                "openIdConnectConfiguration": {
                  "wellKnownOpenIdConfiguration": "https://<TENANT_NAME>.b2clogin.com/<TENANT_NAME>.onmicrosoft.com/<POLICY_NAME>/v2.0/.well-known/openid-configuration"
                }
              },
              "login": {
                "nameClaimType": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
                "scopes": [],
                "loginParameterNames": []
              }
            }
          }
        }
      }
    }
    
  2. Replace <TENANT_NAME> with the first part of your Azure AD B2C tenant name (for example, https://contoso.b2clogin.com/contoso.onmicrosoft.com).

  3. Replace <POLICY_NAME> with the user flows or custom policy you created in step 1.

Step 4: Check the Azure Web app

  1. Navigate to your Azure Web App.
  2. Complete the sign up or sign in process.
  3. In your browser, navigate you the following URL https://<app-name>.azurewebsites.net/.auth/me. Replace the <app-name> with your Azure Web App

Retrieve tokens in app code

From your server code, the provider-specific tokens are injected into the request header, so you can easily access them. The following table shows possible token header names:

Header name Description
X-MS-CLIENT-PRINCIPAL-NAME The user's display name.
X-MS-CLIENT-PRINCIPAL-ID The ID token sub claim.
X-MS-CLIENT-PRINCIPAL-IDP The identity provider name, aadb2c.
X-MS-TOKEN-AADB2C-ID-TOKEN The ID token issued by Azure AD B2C

Next steps