Using Python Social Auth library

# requirement.txt

Django==2.2.6
social-auth-app-django==3.1.0
# auth.py
from social_core.backends.oauth import BaseOAuth2


class BaseSeaauthOAuth2(BaseOAuth2):
    def _get_client_url(self, url_template):
        client_id, _ = self.get_key_and_secret()
        return url_template % client_id

    def get_user_id(self, details, response):
        return details['email']

    def authorization_url(self):
        return self._get_client_url(self.AUTHORIZATION_URL)

    def access_token_url(self):
        return self._get_client_url(self.ACCESS_TOKEN_URL)

    def get_user_details(self, response):
        email = response.get('user', None)
        if not email:
            return ValueError('Cannot get email from response')
        username, domain = email.split('@', 1)
        return {
            'username': email,
            'email': email,
            'fullname': email,
            'first_name': username,
            'last_name': domain,
        }

    def revoke_token_url(self, token, uid):
        return self._get_client_url(self.REVOKE_TOKEN_URL)

    def revoke_token_headers(self, token, uid):
        return {
            'Authorization': 'Bearer %s' % token,
        }


class SeaOAuth2(BaseSeaauthOAuth2):
    name = 'seaauth-oauth2'
    REDIRECT_STATE = False
    AUTHORIZATION_URL = 'https://auth.garenanow.com/web/clients/%s/login/'
    ACCESS_TOKEN_URL = 'https://auth.garenanow.com/api/clients/%s/token/'
    ACCESS_TOKEN_METHOD = 'POST'
    REVOKE_TOKEN_URL = 'https://auth.garenanow.com/api/clients/%s/revoke/'
    REVOKE_TOKEN_METHOD = 'POST'
    GET_USER_INFO_URL = 'https://auth.garenanow.com/api/clients/%s/profile/'

# settings.py

SOCIAL_AUTH_SEAAUTH_OAUTH2_KEY = 'xxxxxxxxxxxxxxxx'
SOCIAL_AUTH_SEAAUTH_OAUTH2_SECRET = 'xxxxxxxxxxxxxxxx'

AUTHENTICATION_BACKENDS = (
    ...
    '<path-to-auth>.auth.SeaOAuth2',  # Add custom SeaAuth backend
    ...
    'django.contrib.auth.backends.ModelBackend',
)

# if you want SeaOAuth2 is the default login method then you can set LOGIN_URL
from django.urls import reverse_lazy
LOGIN_URL = reverse_lazy('social:begin', kwargs={'backend': 'seaauth-oauth2'})