class_docstr: Abstract implementation of OpenID and Attribute Exchange.
  
  Class attributes:
  
  * ``_OPENID_ENDPOINT``: the identity provider's URI.
class_docstr_tok: ["Abstract","implementation","of","OpenID","and","Attribute","Exchange",".","Class","attributes",":","*","``","_OPENID_ENDPOINT","``",":","the","identity","provider","'s","URI","."]
docstr: Fetches the authenticated user data upon redirect.
  
  This method should be called by the handler that receives the
  redirect from the `authenticate_redirect()` method (which is
  often the same as the one that calls it; in that case you would
  call `get_authenticated_user` if the ``openid.mode`` parameter
  is present and `authenticate_redirect` if it is not).
  
  The result of this method will generally be used to set a cookie.
docstr_tok: ["Fetches","the","authenticated","user","data","upon","redirect",".","This","method","should","be","called","by","the","handler","that","receives","the","redirect","from","the","`","authenticate_redirect","(",")","`","method","(","which","is","often","the","same","as","the","one","that","calls","it",";","in","that","case","you","would","call","`","get_authenticated_user","`","if","the","``","openid.mode","``","parameter","is","present","and","`","authenticate_redirect","`","if","it","is","not",")",".","The","result","of","this","method","will","generally","be","used","to","set","a","cookie","."]
code: def get_authenticated_user(self, callback, http_client=None):
      """Fetches the authenticated user data upon redirect.
  
      This method should be called by the handler that receives the
      redirect from the `authenticate_redirect()` method (which is
      often the same as the one that calls it; in that case you would
      call `get_authenticated_user` if the ``openid.mode`` parameter
      is present and `authenticate_redirect` if it is not).
  
      The result of this method will generally be used to set a cookie.
      """
      # Verify the OpenID response via direct request to the OP
      args = dict((k, v[-1]) for k, v in self.request.arguments.items())
      args["openid.mode"] = "check_authentication"
      url = self._OPENID_ENDPOINT
      if http_client is None:
          http_client = self.get_auth_http_client()
      http_client.fetch(
          url,
          functools.partial(self._on_authentication_verified, callback),
          method="POST",
          body=urllib_parse.urlencode(args),
      )
  
imports: from __future__ import absolute_import, division, print_function
  import base64
  import binascii
  import functools
  import hashlib
  import hmac
  import time
  import uuid
  from tornado.concurrent import TracebackFuture, return_future, chain_future
  from tornado import gen
  from tornado import httpclient
  from tornado import escape
  from tornado.httputil import url_concat
  from tornado.log import gen_log
  from tornado.stack_context import ExceptionStackContext
  from tornado.util import unicode_type, ArgReplacer, PY3
label_desc: Use image node_id 2 for calling the OpenIdMixin obj's underlying member method code with example usage: obj.get_authenticated_user(callback, http_client) without return types