Skip to main content

Authentication & Authorization

The Bike4Mind API uses JWT (JSON Web Tokens) for authentication and CASL (Condition Accessible Subject List) for fine-grained authorization.

Authentication​

JWT Token Authentication​

All API requests require a valid JWT token in the Authorization header:

Authorization: Bearer <your-jwt-token>

Getting a Token​

Tokens are obtained through the authentication flow in the main application. The token contains:

  • User identity and permissions
  • Organization membership
  • Subscription tier information
  • Expiration timestamp

Token Validation​

The API middleware automatically:

  1. Validates the JWT signature
  2. Checks token expiration
  3. Extracts user context (req.user)
  4. Builds permission context (req.ability)

Authorization​

Permission System​

Bike4Mind uses CASL for authorization, providing granular control over what users can access:

// Example permission check in API handler
if (!req.ability.can('create', 'Notebook')) {
throw new ForbiddenError('Insufficient permissions');
}

Permission Levels​

  • Admin: Full system access
  • Organization Owner: Full access within organization
  • Member: Standard user permissions
  • Viewer: Read-only access

Resource-Based Permissions​

Permissions are evaluated against specific resources:

  • Users: Profile management, organization membership
  • Organizations: CRUD operations, member management
  • Content: Notebooks, files, sessions
  • API Keys: Service integrations
  • Subscriptions: Billing and plan management

Optional Authentication​

Some endpoints support optional authentication for public content:

// Disable authentication for public endpoints
const handler = baseApi({ auth: false }).get(async (req, res) => {
// Public endpoint logic
});

Error Responses​

Authentication Errors (401)​

{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or expired token"
}
}

Authorization Errors (403)​

{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient permissions"
}
}

Best Practices​

Token Management​

  • Store tokens securely (httpOnly cookies recommended)
  • Implement automatic token refresh
  • Handle token expiration gracefully
  • Never log or expose tokens in client-side code

Permission Handling​

  • Always check permissions before operations
  • Use specific permission checks (avoid broad access)
  • Provide meaningful error messages
  • Implement role-based fallbacks

Security Considerations​

  • Use HTTPS for all API requests
  • Implement rate limiting
  • Monitor for suspicious activity
  • Rotate tokens regularly