| title | Enable Node.js web app authentication options using Azure Active Directory B2C |
|---|---|
| description | This article discusses several ways to enable Node.js web app authentication options. |
| author | kengaderdus |
| manager | CelesteDG |
| ms.service | azure-active-directory |
| ms.topic | reference |
| ms.date | 01/11/2024 |
| ms.author | kengaderdus |
| ms.subservice | b2c |
| ms.custom | b2c-support, devx-track-js |
[!INCLUDE active-directory-b2c-end-of-sale-notice-b]
This article describes how to enable, customize, and enhance the Azure Active Directory B2C (Azure AD B2C) authentication experience for your Node.js web application.
Before you start, it's important to familiarize yourself with the following articles:
- Configure authentication in a Node.js sample web app
- Enable authentication in your own Node.js web app.
[!INCLUDE active-directory-b2c-app-integration-custom-domain]
To use a custom domain and your tenant ID in the authentication URL, follow the guidance in Enable custom domains. Under the project root folder, open the .env file. This file contains information about your Azure AD B2C identity provider.
In the .env file, do the following:
- Replace all instances of
tenant-name.b2clogin.comwith your custom domain. For example, replacetenant-name.b2clogin.com, tologin.contoso.com. - Replace all instances of
tenant-name.onmicrosoft.comwith your tenant ID. For more information, see Use tenant ID.
The following configuration shows the app settings before the change:
#B2C sign up and sign in user flow/policy authority
SIGN_UP_SIGN_IN_POLICY_AUTHORITY=https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_susi
#B2C password reset user flow/policy authority
RESET_PASSWORD_POLICY_AUTHORITY=https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_passwordreset
#B2C edit profile user flow/policy authority
EDIT_PROFILE_POLICY_AUTHORITY=https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_edit
#B2C authority domain
AUTHORITY_DOMAIN=https://contoso.b2clogin.com
#client redirect url
APP_REDIRECT_URI=http://localhost:3000/redirect
#Logout endpoint
LOGOUT_ENDPOINT=https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1_susi/oauth2/v2.0/logout?post_logout_redirect_uri=http://localhost:3000
The following configuration shows the app settings after the change:
#B2C sign up and sign in user flow/policy authority
SIGN_UP_SIGN_IN_POLICY_AUTHORITY=https://login.contoso.com/12345678-0000-0000-0000-000000000000/B2C_1_susi
#B2C password reset user flow/policy authority
RESET_PASSWORD_POLICY_AUTHORITY=https://login.contoso.com/12345678-0000-0000-0000-000000000000/B2C_1_passwordreset
#B2C edit profile user flow/policy authority
EDIT_PROFILE_POLICY_AUTHORITY=https://login.contoso.com/12345678-0000-0000-0000-000000000000/B2C_1_edit
#B2C authority domain
AUTHORITY_DOMAIN=https://login.contoso.com
#client redirect url
APP_REDIRECT_URI=http://localhost:3000/redirect
#Logout endpoint
LOGOUT_ENDPOINT=https://login.contoso.com/12345678-0000-0000-0000-000000000000/B2C_1_susi/oauth2/v2.0/logout?post_logout_redirect_uri=http://localhost:3000
[!INCLUDE active-directory-b2c-app-integration-login-hint]
- If you're using a custom policy, add the required input claim, as described in Set up direct sign-in.
- Find the
authCodeRequestobject, and setloginHintattribute with the login hint.
The following code snippets demonstrate how to pass the sign-in hint parameter. It uses [email protected] as the attribute value.
authCodeRequest.loginHint = "[email protected]"
return confidentialClientApplication.getAuthCodeUrl(authCodeRequest)
.then((response) => {[!INCLUDE active-directory-b2c-app-integration-domain-hint]
- Check the domain name of your external identity provider. For more information, see Redirect sign-in to a social provider.
- Find the
authCodeRequestobject, and setdomainHintattribute with the corresponding domain hint.
The following code snippets demonstrate how to pass the domain hint parameter. It uses facebook.com as the attribute value.
authCodeRequest.domainHint = "facebook.com"
return confidentialClientApplication.getAuthCodeUrl(authCodeRequest)
.then((response) => {[!INCLUDE active-directory-b2c-app-integration-ui-locales]
- Configure language customization.
- Find the
authCodeRequestobject, and setextraQueryParametersattribute with the correspondingui_localesextra parameter.
The following code snippets demonstrate how to pass the ui_locales parameter. It uses es-es as the attribute value.
authCodeRequest.extraQueryParameters = {"ui_locales" : "es-es"}
return confidentialClientApplication.getAuthCodeUrl(authCodeRequest)
.then((response) => {[!INCLUDE active-directory-b2c-app-integration-custom-parameters]
- Configure the ContentDefinitionParameters element.
- Find the
authCodeRequestobject, and setextraQueryParametersattribute with the corresponding extra parameter.
The following code snippets demonstrate how to pass the campaignId custom query string parameter. It uses germany-promotion as the attribute value.
authCodeRequest.extraQueryParameters = {"campaignId" : "germany-promotion"}
return confidentialClientApplication.getAuthCodeUrl(authCodeRequest)
.then((response) => {[!INCLUDE active-directory-b2c-app-integration-id-token-hint]
- In your custom policy, define an ID token hint technical profile.
- Find the
authCodeRequestobject, and setextraQueryParametersattribute with the correspondingid_token_hintextra parameter.
The following code snippets demonstrate how to define an ID token hint:
authCodeRequest.extraQueryParameters = {"id_token_hint": idToken}
return confidentialClientApplication.getAuthCodeUrl(authCodeRequest)[!INCLUDE active-directory-b2c-app-integration-logging]
To configure logging, in index.js, configure the following keys:
logLevellets you specify the level of logging. Possible values:Error,Warning,Info, andVerbose.piiLoggingEnabledenables the input of personal data. Possible values:trueorfalse.
The following code snippet demonstrates how to configure MSAL logging:
const confidentialClientConfig = {
...
system: {
loggerOptions: {
loggerCallback(loglevel, message, containsPii) {
console.log(message);
},
piiLoggingEnabled: false,
logLevel: msal.LogLevel.Verbose,
}
}
};Learn more about MSAL.js configuration options.