OAuth 2.0 Applications
Configure clients, secrets, redirect URIs, and scopes for "Continue with Vorenthic"
C
Custom Web Portal
Production Web Client
Client ID:
client_vorenthic_89127
Client Secret:
sec_live_9012****************
Redirect URI:
https://example.com/callback
OIDC API Playground
Test OpenID Connect endpoints directly from your browser
Select an API endpoint above to inspect response payload...
OAuth 2.0 Integration Code Snippets
Add "Continue with Vorenthic" SSO to your app, website, or program
Frontend SDK & Node.js Backend Token Exchange
// 1. Include Vorenthic Client SDK in your HTML frontend:
// <script src="https://vorenthiclab.pages.dev/js/sdk/vorenthic.js"></script>
// 2. Trigger PKCE SSO Login:
Vorenthic.login({
client_id: 'client_vorenthic_89127',
redirect_uri: 'https://yourapp.com/callback',
scope: 'openid profile email'
});
// 3. Exchange Authorization Code on Node.js / Express Backend:
const fetch = require('node-fetch');
async function exchangeToken(authCode, codeVerifier) {
const res = await fetch('https://vorenthiclab.pages.dev/auth/o/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
grant_type: 'authorization_code',
client_id: 'client_vorenthic_89127',
code: authCode,
redirect_uri: 'https://yourapp.com/callback',
code_verifier: codeVerifier
})
});
const tokens = await res.json();
console.log('JWT Access Token:', tokens.access_token);
return tokens;
}
Python Requests & FastAPI / Flask Token Exchange
import requests
TOKEN_ENDPOINT = "https://vorenthiclab.pages.dev/auth/o/token"
USERINFO_ENDPOINT = "https://vorenthiclab.pages.dev/auth/o/userinfo"
def exchange_code_for_user(auth_code, code_verifier):
# 1. Exchange Authorization Code for JWT Tokens
payload = {
"grant_type": "authorization_code",
"client_id": "client_vorenthic_89127",
"code": auth_code,
"redirect_uri": "https://yourapp.com/callback",
"code_verifier": code_verifier
}
token_res = requests.post(TOKEN_ENDPOINT, json=payload)
tokens = token_res.json()
access_token = tokens.get("access_token")
# 2. Fetch Authenticated User Profile Claims
headers = {"Authorization": f"Bearer {access_token}"}
user_res = requests.get(USERINFO_ENDPOINT, headers=headers)
user_profile = user_res.json()
print(f"Logged in user: {user_profile.get('email')}")
return user_profile
Command-Line cURL API Commands
# 1. Exchange Authorization Code for Access Token & OIDC ID Token:
curl -X POST https://vorenthiclab.pages.dev/auth/o/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "authorization_code",
"client_id": "client_vorenthic_89127",
"code": "YOUR_AUTH_CODE",
"redirect_uri": "https://yourapp.com/callback",
"code_verifier": "YOUR_PKCE_VERIFIER"
}'
# 2. Query Authenticated User Profile Claims:
curl -X GET https://vorenthiclab.pages.dev/auth/o/userinfo \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PHP Native cURL Token Exchange
<?php
$authCode = $_GET['code'];
$tokenUrl = "https://vorenthiclab.pages.dev/auth/o/token";
$postData = json_encode([
'grant_type' => 'authorization_code',
'client_id' => 'client_vorenthic_89127',
'code' => $authCode,
'redirect_uri' => 'https://yourapp.com/callback',
'code_verifier' => 'PKCE_VERIFIER_HERE'
]);
$ch = curl_init($tokenUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);
curl_close($ch);
$tokens = json_decode($response, true);
echo "Access Token: " . $tokens['access_token'];
?>
Go net/http OAuth Token Handler
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
type TokenRequest struct {
GrantType string `json:"grant_type"`
ClientID string `json:"client_id"`
Code string `json:"code"`
RedirectURI string `json:"redirect_uri"`
CodeVerifier string `json:"code_verifier"`
}
func exchangeToken(code string) {
reqBody, _ := json.Marshal(TokenRequest{
GrantType: "authorization_code",
ClientID: "client_vorenthic_89127",
Code: code,
RedirectURI: "https://yourapp.com/callback",
CodeVerifier: "YOUR_PKCE_VERIFIER",
})
resp, err := http.Post("https://vorenthiclab.pages.dev/auth/o/token", "application/json", bytes.NewBuffer(reqBody))
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Status:", resp.Status)
}