Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Applies to: Workforce tenants
External tenants (learn more)
In this article, you learn how to Use Azure Front Door as a reverse proxy for a single-page app (SPA) that uses native authentication API.
The native authentication API doesn't support Cross-Origin Resource Sharing (CORS). Therefore, a single-page app (SPA) that uses this API for user authentication can't make successful requests from front-end JavaScript code. To resolve this issue, add a proxy server between the SPA and the native authentication API. The proxy server injects the appropriate CORS headers into the response.
In a production environment, we recommended using Azure Front Door with a Standard/Premium subscription as a reverse proxy.
Prerequisites
- An Azure subscription. Create an account for free.
- A sample SPA that you can access via a URL such as
http://www.contoso.com
:- You can use the React app described in Quickstart: Sign in users into a sample React SPA by using native authentication API. However, don't configure or run the proxy server, as this guide covers that set up.
- After you run the app, record the app URL for later use in this guide. In production, this URL contains the domain that you want to use as a custom domain URL, such as
http://www.contoso.com
- Install Azure Developer CLI (azd).
Set up Azure Front Door as a reverse proxy
- Familiarize yourself with how to use Azure Front Door with CORS by reading the article at Using Azure Front Door Standard/Premium with CORS.
- Use the instructions in Enable custom URL domains for apps in external tenants to add a custom domain name to your external tenant.
- For creating an Azure Front Door, use azd template.
- In your sample SPA, open the API\React\ReactAuthSimple\src\config.ts file, then replace the value of
BASE_API_URL
, http://localhost:3001/api, withhttps://Enter_Custom_Domain_URL/Enter_the_Tenant_ID_Here
. Replace the placeholder:Enter_Custom_Domain_URL
with your custom domain url, such ascontoso.com
.Enter_the_Tenant_ID_Here
with your Directory (tenant) ID. If you don't have your tenant ID, learn how to read your tenant details.
- If necessary, rerun your sample SPA.
Create Azure Front Door as a reverse proxy by using an Azure Developer CLI (azd) template
To initialize the azd template, run the following command:
azd init --template https://github.com/azure-samples/ms-identity-extid-cors-proxy-frontdoor
When prompted, enter a name for the azd environment. The name is used as a prefix for the resource group so it should be unique within your Azure subscription.
To sign into Azure, run the following command:
azd auth login
To build, provision, and deploy the app resources, run the following command:
azd up
When prompted, enter following information to complete resource creation:
Azure Location
: The Azure location where your resources are deployed.Azure Subscription
: The Azure Subscription where your resources are deployed.corsAllowedOrigin
: The origin domain to allow CORS requests from in the format of SCHEME://DOMAIN:PORT, for example, http://localhost:3000.tenantSubdomain
: The subdomain of your external tenant that we're proxying. For example, if your tenant primary domain iscontoso.onmicrosoft.com
, usecontoso
. If you don't have your tenant subdomain, learn how to read your tenant details.customDomain
: The full URL of the custom domain configured within External ID, for example, login.example.com.
Guidelines for using Azure Front Door as a reverse proxy
We recommend the following guidelines when you set up Azure Front Door as a reverse proxy to manage the CORS headers in a production environment:
Restrict origins
When you configure Azure Front Door, only allow your SPA domain url, such as https://www.contoso.com
, as origin. Avoid configurations that permit all origins, such as *
which could lead to security vulnerabilities.
Use simple requests
Native authentication requests already meet all conditions of simple requests:
- Uses
Http Method: POST
. - Uses
Content-Type: application/x-www-form-urlencoded
. - Request doesn't require custom headers.
- Request doesn't involve
ReadableStream
object in the request. - Request doesn’t require usage of
XMLHttpRequest
.
Related content
- Read more about Cross-Origin Resource Sharing (CORS).
- Native authentication API reference.