Skip to main content

Azure Static Web Apps–SWA CLI behind the scenes

As a follow-up on the presentation I did at CloudBrew about Azure Static Web Apps I want to write a series of blog posts.

Yesterday I introduced the SWA CLI, a tool that brings the full Static Web App experience to your local machine. Today I want to explain a little bit in more detail how it works behind the scenes and show you some of its features.

How does it work?

The SWA CLI is a combination of a local reverse proxy, an authentication & authorization emulator, a local web dev server(depending on the web framework used) and the Azure Functions Core tooling:

  • The reverse proxy intercepts the HTTP requests and forwards them to the correct target server. Here are the routing rules:
    • /.auth/** requests => forwarded to the Auth emulator server.
    • /api/** requests => forwarded to localhost functions (if present).
    • /** => all other requests forwarded to the static assets content server.
  • The authentication & authorization emulator allows you to ‘fake’ authentication against any authentication provider of your choice
  • A local web development server that serves the static content. For example for Angular, the webpack DevServer is used.
  • The Azure Functions Core tooling that allows to run your Azure Functions locally

Authentication & authorization

The easiest way to see this in action is by trying to authenticate in our Static Web App:

  • We start our application through the swa start command:
  • We browse to the authentication endpoint in our application e.g. http://localhost:4280/.auth/login/aad
  • Now we get an emulator page where we can build up the authentication response:
    • We can specify a User ID, Username and any roles or claims we want to add.
  • If we now click on Login, an authentication session is initiated:
  • If we browse to the .auth/me endpoint, we can see the details:

Nice!

More information

Develop and run Azure Functions locally | Microsoft Learn

About SWA CLI | Static Web Apps CLI (azure.github.io)