async def METHOD_NAME(self, request):
    # 1. using the callback_url code and state in request
    oauth_access_token = self._get_oauth_token(request)
    if oauth_access_token is None:
        return None  # authentication failed
    response = requests.get(
        self.user_data_url,
        headers={"Authorization": f"Bearer {oauth_access_token}"},
        verify=self.tls_verify,
    )
    response.raise_for_status()
    user_data = response.json()
    username = user_data["preferred_username"]
    # superadmin gets access to everything
    if "conda_store_superadmin" in user_data.get("roles", []):
        return schema.AuthenticationToken(
            primary_namespace=username,
            role_bindings={"*/*": {"admin"}},
        )
    role_mappings = {
        "conda_store_admin": "admin",
        "conda_store_developer": "developer",
        "conda_store_viewer": "viewer",
    }
    roles = {
        role_mappings[role]
        for role in user_data.get("roles", [])
        if role in role_mappings
    }
    default_namespace = config["default-namespace"]
    namespaces = {username, "global", default_namespace}
    role_bindings = {
        f"{username}/*": {"admin"},
        f"{default_namespace}/*": {"viewer"},
        "global/*": roles,
    }
    for group in user_data.get("groups", []):
        # Use only the base name of Keycloak groups
        group_name = Path(group).name
        namespaces.add(group_name)
        role_bindings[f"{group_name}/*"] = roles
    conda_store = get_conda_store(request)
    for namespace in namespaces:
        _namespace = api.get_namespace(conda_store.db, name=namespace)
        if _namespace is None:
            conda_store.db.add(orm.Namespace(name=namespace))
            conda_store.db.commit()
    return schema.AuthenticationToken(
        primary_namespace=username,
        role_bindings=role_bindings,
    )