The OAuth 2.0 Mock Server is a developer-friendly tool that mimics real-world OAuth 2.0 providers like Google, GitHub, and others. Perfect for local development, testing, and CI pipelines, it provides fully configurable endpoints for authorize, token, and userinfo flows. No setup required from Google or GitHub.
1. Test Oauth 2.0 login flows with minimal setup. 2. Automate authentication testing in CI/CD pipelines. 3. Build apps faster with a drop-in Oauth 2.0 mock that behaves like a real provider.
/oauth/authorize
N/A
N/A
{ "Content-Type": "text/html" }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Oauth2 Login</title> <style> body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; } .login-box { background: white; padding: 2rem 2.5rem; border: 1px solid black; width: 100%; max-width: 400px; text-align: center; } .form-box { display: flex; flex-direction: column; gap: 1em; } input[type="email"], input[type="password"], input[type="submit"] { font-size: 1rem; border: 1px solid black; padding: 10px 5px; } input[type="submit"] { background-color: #2ea44f; color: white; border: none; font-size: 1.1rem; border-radius: 4px; cursor: pointer; } input[type="submit"]:hover { background-color: #218838; } label { font-weight: bold; text-align: left; display: block; } </style> </head> <body> <div class="login-box"> <h2>Sign in (Powered by Beeceptor)</h2> <form method="POST" action="/login" class="form-box"> <input type="hidden" name="nonce" value="{{queryParam "nonce"}}"/> <input type="hidden" name="state" value="{{queryParam "state"}}"/> <input type="hidden" name="redirect_uri" value="{{queryParam "redirect_uri"}}"/> <input type="hidden" name="client_id" value="{{queryParam "client_id"}}"/> <label for="email">Email</label> <input type="email" name="email" placeholder="your-email@example.com" required /> <label for="password">Password</label> <input type="password" name="password" required /> <input type="submit" value="Login" /> </form> </div> </body> </html>
/oauth/token/google
N/A
N/A
{ "Content-Type": "application/json" }
{ "id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiJnb29nbGUtaWQtMTIzIiwic3ViIjoiMTEwMjQ4NDk1OTIxMjM4OTg2NDIwIiwibmFtZSI6IkJlZSBDZXB0b3IiLCJlbWFpbCI6Im9hdXRoLXNhbXBsZS1nb29nbGVAYmVlY2VwdG9yLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwaWN0dXJlIjoiaHR0cHM6Ly9jZG4uYmVlY2VwdG9yLmNvbS9hc3NldHMvaW1hZ2VzL2xvZ28tYmVlY2VwdG9yLnBuZyIsImF1ZCI6Imdvb2dsZS1pZC0xMjMiLCJpYXQiOjE2ODAwMDAwMDAsImV4cCI6NjQwNzM0MTMzNjYsInJhdCI6MX0.dummysignature", "access_token": "{{faker 'internet.jwt'}}", "token_type": "Bearer", "scope": "read write", "issued_at": "{{now 'utc'}}" }
/oauth/token/github
N/A
N/A
{ "Content-Type": "application/json" }
{ "access_token": "{{faker 'internet.jwt'}}", "token_type": "Bearer", "scope": "read write", "issued_at": "{{now 'utc'}}" }
/login
N/A
N/A
{ "Content-Type": "text/html" }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Redirecting...</title> </head> <body> <p>Redirecting, please wait...</p> <script> const redirectUri = "{{body "redirect_uri"}}"; const state = "{{body "state"}}"; const redirectUrl = `${redirectUri}?code=mock-code-123&state=${state}`; window.location.href = redirectUrl; </script> </body> </html>
/userinfo/github
N/A
N/A
{ "Content-Type": "application/json" }
{ "login": "bee-user", "id": 459, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://cdn.beeceptor.com/assets/images/logo-beeceptor.png", "gravatar_id": "", "url": "https://oauth-mock.mock.beeceptor.com/userinfo", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false, "name": "Bee User", "company": "Beeceptor", "blog": "https://github.com/blog", "location": "India", "email": "oauth-sample-github@beeceptor.com", "hireable": false, "bio": "There once was...", "twitter_username": "beeceptor", "public_repos": 2, "public_gists": 1, "followers": 20, "following": 0, "created_at": "2008-01-14T04:33:35Z", "updated_at": "2008-01-14T04:33:35Z", "private_gists": 81, "total_private_repos": 100, "owned_private_repos": 100, "disk_usage": 10000, "collaborators": 8, "two_factor_authentication": true, "plan": { "name": "Medium", "space": 400, "private_repos": 20, "collaborators": 0 } }
/userinfo/google
N/A
N/A
{ "Content-Type": "application/json" }
{ "sub": "110248495921238986420", "name": "Bee User", "given_name": "Bee", "family_name": "Ceptor", "picture": "https://cdn.beeceptor.com/assets/images/logo-beeceptor.png", "email": "oauth-sample-google@beeceptor.com", "email_verified": true, "locale": "en", "hd": "beeceptor.com" }