← Cloudflare Pages / pages / functions / plugins
Cloudflare Access
Cloudflare Access Pages Plugin je middleware, který ověřuje JWT tvrzení Cloudflare Access. Obsahuje také API pro vyhledání dalších informací o JWT daného uživatele.
Instalace
npm i @cloudflare/pages-plugin-cloudflare-accessPoužití
import cloudflareAccessPlugin from "@cloudflare/pages-plugin-cloudflare-access";
export const onRequest: PagesFunction = cloudflareAccessPlugin({
domain: "https://test.cloudflareaccess.com",
aud: "4714c1358e65fe4b408ad6d432a5f878f08194bdb4752441fd56faefa9b2b6f2",
});Plugin přijímá objekt se dvěma vlastnostmi: domain vašeho účtu Cloudflare Access a zásada aud (audience), vůči kterému se ověření provádí. Požadavkům, které ověřením neprojdou, bude vrácen 403 stavový kód.
Přístup k payloadu JWT
Pokud ve své aplikaci potřebujete použít payload JWT (například potřebujete e-mailovou adresu uživatele), tento Plugin vám jej zpřístupní na data.cloudflareAccess.JWT.payload.
Například:
import type { PluginData } from "@cloudflare/pages-plugin-cloudflare-access";
export const onRequest: PagesFunction<unknown, any, PluginData> = async ({
data,
}) => {
return new Response(
`Hello, ${data.cloudflareAccess.JWT.payload.email || "service user"}!`,
);
}; celý payload JWT bude k dispozici na data.cloudflareAccess.JWT.payload. Mějte na paměti, že dostupná pole se liší mezi identitními autorizacemi (například uživatel v prohlížeči) a neidentitními autorizacemi (například service token).
Vyhledání identity
Chcete-li získat více informací o identitě daného uživatele, použijte poskytnutý getIdentity funkce API:
import { getIdentity } from "@cloudflare/pages-plugin-cloudflare-access/api";
export const onRequest: PagesFunction = async ({ data }) => {
const identity = await getIdentity({
jwt: "eyJhbGciOiJIUzI1NiIsImtpZCI6IjkzMzhhYmUxYmFmMmZlNDkyZjY0NmE3MzZmMjVhZmJmN2IwMjVlMzVjNjI3YmU0ZjYwYzQxNGQ0YzczMDY5YjgiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOlsiOTdlMmFhZTEyMDEyMWY5MDJkZjhiYzk5ZmMzNDU5MTNhYjE4NmQxNzRmMzA3OWVhNzI5MjM2NzY2YjJlN2M0YSJdLCJlbWFpbCI6ImFkbWluQGV4YW1wbGUuY29tIiwiZXhwIjoxNTE5NDE4MjE0LCJpYXQiOjE1MTkzMzE4MTUsImlzcyI6Imh0dHBzOi8vdGVzdC5jbG91ZGZsYXJlYWNjZXNzLmNvbSIsIm5vbmNlIjoiMWQ4MDgzZjcwOGE0Nzk4MjI5NmYyZDk4OTZkNzBmMjA3YTI3OTM4ZjAyNjU0MGMzOTJiOTAzZTVmZGY0ZDZlOSIsInN1YiI6ImNhNjM5YmI5LTI2YWItNDJlNS1iOWJmLTNhZWEyN2IzMzFmZCJ9.05vGt-_0Mw6WEFJF3jpaqkNb88PUMplsjzlEUvCEfnQ",
domain: "https://test.cloudflareaccess.com",
});
return new Response(`Hello, ${identity.name || "service user"}!`);
}; getIdentity funkce přijímá objekt se dvěma vlastnostmi: jwt řetězec a domain řetězec. Vrací Promise z objekt vrácený /cdn-cgi/access/get-identity koncový bod. To se hodí zejména tehdy, když chcete členství uživatele ve skupině využít například pro oprávnění v aplikaci.
Pro pohodlí lze tytéž informace pro JWT aktuálního požadavku získat pomocí data.cloudflareAccess.JWT.getIdentity funkci (za předpokladu, že jste požadavek již ověřili pomocí pluginu výše):
import type { PluginData } from "@cloudflare/pages-plugin-cloudflare-access";
export const onRequest: PagesFunction<unknown, any, PluginData> = async ({
data,
}) => {
const identity = await data.cloudflareAccess.JWT.getIdentity();
return new Response(`Hello, ${identity.name || "service user"}!`);
};Adresy URL pro přihlášení a odhlášení
Pokud chcete vynutit přihlášení nebo odhlášení, použijte tyto pomocné funkce ke generování URL adres a přesměrování uživatele:
import { generateLoginURL } from "@cloudflare/pages-plugin-cloudflare-access/api";
export const onRequest = () => {
const loginURL = generateLoginURL({
redirectURL: "https://example.com/greet",
domain: "https://test.cloudflareaccess.com",
aud: "4714c1358e65fe4b408ad6d432a5f878f08194bdb4752441fd56faefa9b2b6f2",
});
return new Response(null, {
status: 302,
headers: { Location: loginURL },
});
};import { generateLogoutURL } from "@cloudflare/pages-plugin-cloudflare-access/api";
export const onRequest = () =>
new Response(null, {
status: 302,
headers: {
Location: generateLogoutURL({
domain: "https://test.cloudflareaccess.com",
}),
},
});