Get a Pentest and security assessment of your IT network.

Cyber Security

OAuth 2.0 Security Guide

TL;DR

OAuth 2.0 is a powerful way to give apps limited access to your data without sharing your passwords. This guide covers the key steps to keep it secure for both developers and users.

1. Choose the Right Grant Type

The grant type determines how your application obtains an access token. Selecting the correct one is crucial for security.

  • Authorization Code: Best for web apps and mobile apps where a server component can handle the redirect flow. Most secure option.
  • Implicit Grant: (Discouraged) Suitable for single-page applications (SPAs) running entirely in the browser, but less secure due to token exposure. Consider using Authorization Code with PKCE instead.
  • Resource Owner Password Credentials: (Avoid if possible) Requires users to directly enter their username and password into your app. Only use when you fully trust the application and other options aren’t feasible.
  • Client Credentials: For machine-to-machine communication where a user isn’t involved.

2. Implement PKCE (Proof Key for Code Exchange)

PKCE adds an extra layer of security to the Authorization Code grant type, especially important for public clients like mobile apps and SPAs.

  • Code Verifier: Generate a random string before redirecting the user to the authorization server.
  • Code Challenge: Hash the code verifier using SHA256.
  • Send both with Authorization Request: Include the code challenge in your initial request.
  • Exchange Code for Token: When you receive the authorization code, send the code verifier along with it to prove ownership.
# Example of generating a code verifier (Python)
import secrets
import base64

def generate_code_verifier(length=128):
  return base64.urlsafe_b64encode(secrets.token_bytes(length)).decode('utf-8')

# Example of generating a code challenge (Python)
import hashlib

def generate_code_challenge(code_verifier):
    sha256_hash = hashlib.sha256(code_verifier.encode('utf-8')).digest()
    return base64.urlsafe_b64encode(sha256_hash).decode('utf-8')

3. Validate Redirect URIs

Strictly validate the redirect URI provided by the user against a pre-configured list in your application settings.

  • Prevent Open Redirects: Ensure that the redirect URI doesn’t allow attackers to redirect users to malicious websites.
  • Register Specific URIs: Avoid using wildcards or overly broad patterns for redirect URIs.

4. Store Tokens Securely

Access and refresh tokens should be stored securely.

  • Encryption: Encrypt tokens at rest using a strong encryption algorithm.
  • Secure Storage: Use secure storage mechanisms provided by the platform (e.g., Keychain on iOS, Keystore on Android).
  • Avoid LocalStorage: Do not store tokens in browser local storage due to XSS vulnerabilities. Consider cookies with HttpOnly and Secure flags.

5. Refresh Token Rotation

Implement refresh token rotation to limit the impact of compromised refresh tokens.

  • Issue New Tokens: Each time a refresh token is used, issue a new access token and a new refresh token.
  • Revoke Old Tokens: Immediately revoke the old refresh token after issuing the new one.

6. Scope Management

Define granular scopes to limit the permissions granted to applications.

  • Principle of Least Privilege: Only request the minimum necessary scopes for your application’s functionality.
  • User Consent: Clearly display the requested scopes to users and obtain their explicit consent before granting access.

7. Token Expiration

Set appropriate expiration times for both access and refresh tokens.

  • Short-Lived Access Tokens: Use short expiration times for access tokens to minimize the window of opportunity for attackers.
  • Longer-Lived Refresh Tokens: Refresh tokens can have longer expiration times, but should be subject to rotation and revocation policies.

8. Cyber security Monitoring & Logging

Implement robust logging and monitoring to detect suspicious activity.

  • Log Authorization Requests: Log all authorization requests, including client ID, redirect URI, scopes, and user information.
  • Monitor Token Usage: Monitor token usage patterns for anomalies or unauthorized access.
  • Alerting: Set up alerts to notify you of potential security breaches.
Related posts
Cyber Security

Zip Codes & PII: Are They Personal Data?

Cyber Security

Zero-Day Vulnerabilities: User Defence Guide

Cyber Security

Zero Knowledge Voting with Trusted Server

Cyber Security

ZeroNet: 51% Attack Risks & Mitigation