OAuth 2.0 Authentication

Overview

This page contains recommendations for the implementation of OAuth 2.0 authentication.

General

  • Do not implement support of OAuth2 authentication from scratch. Instead, use well know and up-to-date frameworks or packages.

  • Use the Authorization Grant Flow to implement OAuth2 authentication.

  • Do not use the Implicit Grant Flow. Disable the use of the Implicit Grant Flow if a framework or package supports the flow.

  • Use URLs from an allow list as redirect_uri.

  • Do not use wildcards for defining redirect_uri.

  • Use a unique allow list with redirect_uri for each OAuth2 client.

  • Implement CSRF protection using the state parameter, see the Vulnerability Mitigation: Cross-Site Request Forgery (CSRF) page.

  • Generate a unique state parameter for each authentication attempt.

  • Generate the state parameter using a cryptographically strong random generator, see the Cryptography: Random Generators page.

  • Use the state parameter of length 16+ bytes.

  • Generate a unique authorization code for each authentication attempt.

  • Generate the authorization code using a cryptographically strong random generator, see the Cryptography: Random Generators page.

  • Use authorization codes of length 16+ bytes.

  • Set expiration time for an authorization code < 1 hour.

  • Use an authorization code once. Delete an authorization code or transfer it to a final status that prohibits reusing.

  • Do not redirect users to URLs specified in the parameters without checking them against an allow list.

  • Do not assign OAuth authentication for already existing accounts during authentication.

chevron-rightClarificationhashtag

If an application automatically assigns OAuth authentication to an existing account during authentication, this means that an attacker could potentially take over a victim's account using the flow like this:

  1. An attacker creates an account in a service provider using a victim's email linked to an account in our application.

  2. An attacker uses Sign in with ... to login into an account in our application.

  3. An application will find a victim's account using an email address from an attacker's service provider account (an attacker linked that email with a service provider account).

  4. Since the emails are the same, an application will log in an attacker to a victim's account.

  • Notify a user via an available communication channel (email, push, SMS, etc.) about successful login under their account from an unknown location, browser, client, etc.

Frameworks & packages for implementation of OAuth2 authentication

Use the oauth2arrow-up-right package, that implements an OAuth2 client.

References

Last updated