This repo demonstrates how you can use Role Based Access Controls, Netlify functions and role based _redirects
to create single sign on flows.
TLDR;
You can use netlify functions + any identity provider (Auth0, Okta, Netlify identity etc) to gate as many Netlify sites as they want!
- Using Okta
- ... add your provider here!
The protected sites can only be access after logging in through the Login Portal site.
We are using a combination of Netlify functions, Access Control and role based _redirects
┌────────────────────────────────────┐ │ User visits the gated site │ │ │ │ gated.com │◀───────────────────────────────────────────────────┐ │ │ │ └────────────────────────────────────┘ │ │ │ ▼ │ ┌──────────────────────────────────────────────────────┐ │ │ Netlify role based redirects │ │ │ check for 'nf_jwt' cookie + user role │ │ │ │ │ │ via Netlify `_redirect` rule: │ │ │ │ │ │ /* /:splat 200! Role=* │ │ └──────────────────────────────────────────────────────┘ │ │ │ Has valid jwt + correct role? │ │ │ │ │ ┌──────yes───────────┴──────────────No────────────┐ │ │ │ │ │ │ │ │ │ │ ▼ ▼ │ ┌─────────────────────┐ ┌───────────────────────────────────────────────────────────────────┐ │ │ Success! │ │ │ │ │ │ │ │ │ │ Show gated site │ │ Redirect to Login Portal Site via │ │ │ │ │ Netlify `_redirect` rule: │ │ └─────────────────────┘ │ │ │ │ /* https://login-portal.com/?site=https://gated.com/:splat 302! │ │ │ │ │ │ │ │ └───────────────────────────────────────────────────────────────────┘ │ │ │ ▼ │ ┌─────────────────────────────────────────┐ │ │ │ │ │ User logs into Portal Site │ │ │ │ │ └─────────────────────────────────────────┘ │ │ │ │ │ ▼ │ ┌─────────────────────────────────────┐ │ │ Netlify function triggered to │ │ │ verify Okta session │ │ │ │ │ └─────────────────────────────────────┘ │ │ │ │ │ is Okta session valid? │ │ │ │ │ ┌───────────No───────────────┴─────yes─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ │ ┌──────────────────────────────────┐ ┌──────────────────────────────────────┐ │ │ Redirect back to login portal │ │ │ │ │ & show error message │ │ Generate `nf_jwt` cookie and │ │ │ │ │ set cookie in function response │ │ │ "Session invalid" │ │ │ │ └──────────────────────────────────┘ └──────────────────────────────────────┘ │ │ │ │ │ │ │ ▼ │ ┌─────────────────────────────────────────┐ │ │ Then redirect back to original │ │ │ referrer to set cookie on gated site │ │ │ │ │ │ gated-site.com/set-cookie Function │ │ └─────────────────────────────────────────┘ │ │ │ ▼ │ ┌───────────────────────────────────┐ │ │ │ │ │ Set nf_jwt cookie on gated.com │ │ │ │ │ └───────────────────────────────────┘ │ │ │ │ │ └─────────────┐ │ │ │ ▼ │ ┌──────────────────────┐ │ │ │ │ │ Redirect to original │ │ │ URL requested │──┘ │ │ └──────────────────────┘
