4abf69844ad86c8890bd0d31abeb2b80bc0ffd52
@resuely/astro-oidc-rp
Astro integration that injects OIDC login/callback/logout routes, a middleware that sets Astro.locals.user, and type augmentation.
Install
npm install @resuely/astro-oidc-rp
Usage (astro.config.mjs)
import { defineConfig } from "astro/config"; import resuelyOidc from "@resuely/astro-oidc-rp";
export default defineConfig({ integrations: [ resuelyOidc({ issuer: "https://your-idp", clientId: "YOUR_CLIENT_ID", cookie: { signingSecret: process.env.OIDC_SIGNING_SECRET! }, protected: ["/app/*", "/me"], }), ], });
- Injected routes:
- Login: /login
- Callback: /oidc/callback
- Logout: /logout
Options
- issuer: string (required)
- clientId: string (required)
- scopes?: string (default: "openid email profile")
- routes?: { login?: string; callback?: string; logout?: string }
- redirectUri?: { mode: "infer-from-request" } | { absolute: string }
- cookie?: { name?: string; sameSite?: "Lax"|"Strict"|"None"; secure?: boolean; domain?: string; path?: string; signingSecret: string; maxAgeSec?: number }
- protected?: string[] patterns
Types: Astro.locals
Enable type augmentation by referencing the package export:
- Add to your tsconfig.json: { "compilerOptions": { "types": ["@resuely/astro-oidc-rp/astro-locals"] } }
Then locals.user is typed as { sub: string; email?: string } | null | undefined.
Security notes
- Always provide a strong
cookie.signingSecret. - In production, cookies are
Secureby default. - The init cookie used during login is short-lived (5 minutes) and set
HttpOnly+SameSite=Lax.
Build & Publish
- Build: npm run build
- Publish to npm: npm publish --access public
License
MIT
Languages
TypeScript
100%