Send SSO attributes to Access-protected origins with Workers
This tutorial will walk you through extending the single-sign-on (SSO) capabilities of Cloudflare Access with our serverless computing platform, Cloudflare Workers. Specifically, this guide will demonstrate how to modify requests sent to your secured origin to include additional information from the Cloudflare Access authentication event.
Time to complete: 45 minutes
Authentication flow
Cloudflare Access is an authentication proxy in charge of validating a user’s identity before they connect to your application. As shown in the diagram below, Access inserts a JWT into the request, which can then be verified by the origin server.
You can extend this functionality by using a Cloudflare Worker to insert additional HTTP headers into the request. In this example, we will add the device posture attributes firewall_activated
and disk_encrypted
, but you can include any attributes that Cloudflare Access collects from the authentication event.
Benefits
This approach allows you to:
- Enhance security: By incorporating additional information from the authentication event, you can implement more robust security measures. For example, you can use device posture data to enforce access based on device compliance.
- Improve user experience: You can personalize the user experience by tailoring content or functionality based on user attributes. For example, you can display different content based on the user’s role or location.
- Simplify development: By using Cloudflare Workers, you can easily extend your Cloudflare Access configuration without modifying your origin application code.
Before you begin
- Add a self-hosted application to Cloudflare Access.
- Enable the Disk encryption and Firewall device posture checks.
- Install Wrangler on your local machine.
1. Create the Worker
-
Create a new Workers project:
For setup, select the following options:
- For What would you like to start with?, choose
Hello World example
. - For Which template would you like to use?, choose
Hello World Worker
. - For Which language do you want to use?, choose
JavaScript
. - For Do you want to use git for version control?, choose
Yes
. - For Do you want to deploy your application?, choose
No
(we will be making some changes before deploying).
- For What would you like to start with?, choose
-
Change to the project directory:
-
Copy-paste the following code into
src/index.js
. Be sure to replace<your-team-name>
with your Zero Trust team name.
2. View the user’s identity
The script in index.js
uses the get-identity
endpoint to fetch a user’s complete identity from a Cloudflare Access authentication event. To view a list of available data fields, log in to your Access application and append /cdn-cgi/access/get-identity
to the URL. For example, if www.example.com
is behind Access, go to https://www.example.com/cdn-cgi/access/get-identity
.
Below is an example of a user identity that includes the disk_encryption
and firewall
posture checks. The Worker inserts the posture check results into the request headers Cf-Access-Firewall-Activated and Cf-Access-Disk-Encrypted.
3. Route the Worker to your application
In wrangler.toml
, set up a route that maps the Worker to your Access application domain:
4. Deploy the Worker
The Worker will now insert the Cf-Access-Firewall-Activated and Cf-Access-Disk-Encrypted headers into requests that pass your application’s Access policies.
You can verify that these headers are received by the origin server.