Skip to main content

Primus Auth

PrimusAuthService (Angular) and usePrimusAuth (React) are the primary interfaces for authentication in the Primus SDK. They handle token storage, session management, SSO redirects, and automatic token refresh.

Architecture
Your app  →  PrimusProvider / PrimusUiModule

PrimusAuthService

Primus Identity Broker API (/api/auth/*)

Azure AD / Auth0 / Google / Okta

The SDK never talks to identity providers directly — all auth flows go through your Primus backend broker.

Setup

Wrap your app with PrimusProvider once at the root:

// main.tsx or App.tsx
import { PrimusProvider, PrimusThemeProvider, PrimusUiCoreBridge } from 'primus-react-ui';

export default function App() {
return (
<PrimusProvider
authority="https://api.yourdomain.com"
authBasePath="/api/auth"
clientId="my-app"
>
<PrimusThemeProvider defaultTheme="dark">
<PrimusUiCoreBridge />
<AppRoutes />
</PrimusThemeProvider>
</PrimusProvider>
);
}

Sign in

import { usePrimusAuth } from 'primus-react-ui';

function LoginPage() {
const { login, loginWithProvider, isLoading, error } = usePrimusAuth();

// Email + password
const handleSubmit = async (email: string, password: string) => {
await login({ email, password });
// Redirects to /dashboard on success
};

// Social / SSO
const handleMicrosoft = () => loginWithProvider('azure');
const handleGoogle = () => loginWithProvider('google');

return (
<>
{error && <div role="alert" data-variant="danger">{error}</div>}
<button onClick={() => handleSubmit('jane@acme.com', 'secret')}>
Sign in
</button>
<button onClick={handleMicrosoft}>Continue with Microsoft</button>
</>
);
}

Check auth state

import { usePrimusAuth } from 'primus-react-ui';

function Dashboard() {
const { user, isAuthenticated, isLoading } = usePrimusAuth();

if (isLoading) return <div aria-busy="true" />;
if (!isAuthenticated) return <Navigate to="/login" />;

return <h1>Welcome, {user.name}</h1>;
}

Sign out

const { logout } = usePrimusAuth();

<button onClick={() => logout()}>Sign out</button>

// Redirect after logout
<button onClick={() => logout({ returnTo: '/login' })}>Sign out</button>

Route protection

import { usePrimusAuth } from 'primus-react-ui';
import { Navigate } from 'react-router-dom';

function RequireAuth({ children }: { children: React.ReactNode }) {
const { isAuthenticated, isLoading } = usePrimusAuth();

if (isLoading) return <div aria-busy="true" />;
if (!isAuthenticated) return <Navigate to="/login" replace />;

return <>{children}</>;
}

// Usage in router
<Route path="/dashboard" element={
<RequireAuth>
<Dashboard />
</RequireAuth>
} />

Access the token

const { getToken } = usePrimusAuth();

// In an API call
const fetchData = async () => {
const token = await getToken();
const res = await fetch('/api/tenants', {
headers: { Authorization: `Bearer ${token}` },
});
return res.json();
};

API Reference

usePrimusAuth (React)

Property / MethodTypeDescription
isAuthenticatedbooleanWhether the user is currently signed in
isLoadingbooleanTrue while the auth state is being resolved
userPrimusUser | nullCurrent user object
errorstring | nullLast auth error message
login(credentials)Promise<void>Sign in with email + password
loginWithProvider(provider)voidStart SSO redirect for a provider
logout(options?)Promise<void>Sign out, optionally redirect
getToken()Promise<string>Get the current access token

PrimusAuthService (Angular)

Property / MethodTypeDescription
isAuthenticated$Observable<boolean>Auth state stream
isLoading$Observable<boolean>Loading state stream
user$Observable<PrimusUser | null>Current user stream
signIn(email, password)Promise<void>Email/password sign in
signInWithProvider(provider)voidStart SSO redirect
signOut(returnTo?)voidSign out
getToken()Promise<string>Get access token

PrimusUser

interface PrimusUser {
id: string;
email: string;
name: string;
roles: string[];
tenantId: string;
avatar?: string;
}

PrimusProvider props (React)

PropTypeDefaultDescription
authoritystringrequiredYour API base URL
authBasePathstring'/api/auth'Auth endpoint prefix
clientIdstringrequiredApp client identifier

providePrimus / forRoot options (Angular)

OptionTypeDescription
apiBaseUrlstringYour API base URL
authToken() => string | nullToken resolver called on every request

Social providers

ProviderloginWithProvider keyNotes
Microsoft / Azure AD'azure'Requires Azure AD app registration
Google'google'Requires Google OAuth client
Auth0'auth0'Requires Auth0 application
GitHub'github'Requires GitHub OAuth app
Okta'okta'Requires Okta application

See the Identity Broker backend docs for provider configuration.