LIGHT HOPE Auth is a centralized authentication service — passwordless email login, Google OAuth, RS256-signed JWTs and single sign-on — with drop-in SDKs so any app trusts the same identity in minutes.
Passwordless & OAuth · RS256 JWT · Python & Node.js SDKs · Self-hosted
# Protect any Flask route with the shared ecosystem identity from lighthope_auth import LightHopeAuth auth = LightHopeAuth(app, public_key=PUBLIC_KEY, auth_url="https://auth.lighthope.com") @app.route("/dashboard") @auth.require_login def dashboard(): return f"Hello, {auth.current_user['name']}"
A focused identity layer that your services can trust with a single public key.
One identity across all your apps. Sign in once; every project that verifies the token knows who the user is.
Users receive a one-time verification code by email — no passwords to store, leak, or reset. Delivery via SendGrid or SMTP.
Full authorization-code flow with CSRF state protection, verified-email enforcement, and open-redirect guards built in.
Tokens are signed with an RSA private key and verified anywhere with the public key — your services never share a secret.
Short-lived access tokens, refresh-token rotation, and a server-side denylist so logout revokes credentials instantly by JTI.
A clear role hierarchy — from anonymous to admin — enforced from signed claims only. Client query params can never escalate.
Official Python (Flask) and Node.js/TypeScript (Next.js & Express) SDKs. One decorator or middleware protects a route.
HttpOnly + Secure cookies, per-IP rate limiting on sensitive endpoints, CSRF protection, and fail-safe authorization checks.
A real database-probing health check and a Prometheus /metrics endpoint make the service easy to run in production.
Point your app at the auth service, hand it the public key, and protect routes with a single decorator or middleware. The same JWT is verified everywhere.
# pip install lighthope-auth from flask import Flask from lighthope_auth import LightHopeAuth app = Flask(__name__) auth = LightHopeAuth( app, public_key=PUBLIC_KEY, auth_url="https://auth.lighthope.com", ) @app.route("/dashboard") @auth.require_login def dashboard(): user = auth.current_user return f"Hello, {user['name']}!"
// npm i @lighthope/auth-sdk import { LightHopeAuth } from "@lighthope/auth-sdk"; import { NextResponse } from "next/server"; const auth = new LightHopeAuth({ authUrl: "https://auth.lighthope.com", publicKey: process.env.LIGHTHOPE_PUBLIC_KEY, projectId: "my-app", }); export function middleware(req) { const user = auth.requireAuth(req); if (!user) return NextResponse.redirect(auth.getLoginUrl(req.url)); return NextResponse.next(); }
# 1. Request a one-time login code curl -X POST "https://auth.lighthope.com/api/v1/auth/login/email/send-code" \ -G --data-urlencode "email=you@example.com" # 2. Exchange the code for tokens curl -X POST "https://auth.lighthope.com/api/v1/auth/login/email" \ -H "Content-Type: application/json" \ -d '{"email":"you@example.com","code":"123456"}' # 3. Call any endpoint with the access token curl "https://auth.lighthope.com/api/v1/auth/me" \ -H "Authorization: Bearer $ACCESS_TOKEN"
Every method issues the same signed JWT, so your apps stay simple.
Passwordless one-time codes sent to a verified inbox. Rate-limited to resist abuse.
Standard OAuth 2.0 authorization-code flow with CSRF state and verified-email enforcement.
Accept tokens from an Authorization header for APIs, or HttpOnly cookies for browsers.
Stop rebuilding login in every service. Centralize identity once.
Give a portfolio of internal tools and products one shared login and one user identity — no duplicate account systems.
Wrap admin panels and back-office tools with one decorator. Role checks are enforced from signed claims, not client input.
Spin up a service, install the SDK, verify the public key — protected in minutes instead of building auth from scratch.
Self-host the whole service — your database, your keys, your users. No third-party lock-in for the front door to your stack.
Deploy the service, drop in an SDK, and protect your first route today. Talk to us about running it for your team.