class_docstr: Abstract base class for implementing authorization hooks.
  
  Subclasses must supply one of: ``get_user`` or ``get_user_async``.
  
  Subclasses must also supply one of ``login_url`` or ``get_login_url``.
  
  Optionally, if ``login_url`` provides a relative URL, then ``login_handler``
  may also be supplied.
  
  The properties ``logout_url`` and ``get_logout_handler`` are analogous to
  the corresponding login properties, and are optional.
class_docstr_tok: ["Abstract","base","class","for","implementing","authorization","hooks",".","Subclasses","must","supply","one","of",":","``","get_user","``","or","``","get_user_async","``",".","Subclasses","must","also","supply","one","of","``","login_url","``","or","``","get_login_url","``",".","Optionally",",","if","``","login_url","``","provides","a","relative","URL",",","then","``","login_handler","``","may","also","be","supplied",".","The","properties","``","logout_url","``","and","``","get_logout_handler","``","are","analogous","to","the","corresponding","login","properties",",","and","are","optional","."]
code: def __init__(self) -> None:
      self._validate()
  
imports: from __future__ import annotations
  import logging
  import importlib.util
  from os.path import isfile
  from types import ModuleType
  from typing import TYPE_CHECKING, Awaitable, Callable, NewType
  from tornado.httputil import HTTPServerRequest
  from tornado.web import RequestHandler
  from ..util.serialization import make_globally_unique_id
label_desc: Use image node_id 1 to create a new AuthProvider object  with example: obj = AuthProvider()