Azure Static Web Apps has built-in Authentication and Authorization for both the web and API part of the application.
At the end of last year, I wrote about a package to make it easier in React apps to work with auth and get access to the user details. But this still left a gap in the APIs, your APIs need to parse the JSON out of a custom header, which is base64 encoded. All a bit complicated in my book.
So, I decided to make another package to help with that, @aaronpowell/static-web-apps-api-auth
.
Using the package
The package exposes two functions, isAuthenticated
and getUserInfo
. Here's an example of an API that uses the package:
import { AzureFunction, Context, HttpRequest } from "@azure/functions";
import {
getUserInfo,
isAuthenticated,
} from "@aaronpowell/static-web-apps-api-auth";
const httpTrigger: AzureFunction = async function (
context: Context,
req: HttpRequest
): Promise<void> {
context.log("HTTP trigger function processed a request.");
if (!isAuthenticated(req)) {
context.res = {
body: "You are not logged in at the moment",
};
} else {
const { clientPrincipal } = getUserInfo(req);
context.res = {
body: `Thanks for logging in ${
clientPrincipal.userDetails
}. You logged in via ${
clientPrincipal.identityProvider
} and have the roles ${clientPrincipal.userRoles.join(", ")}`,
};
}
};
export default httpTrigger;
The isAuthenticated
function takes the request that the API receives and returns a boolean of whether the user is authenticated or not, and the getUserInfo
unpacks the header data into a JavaScript object (with TypeScript typings) that you can work with.
Hopefully this makes it just that bit easier to work with authenticated experiences on Static Web Apps.