code: async def create_authenticator_async(self, connection, debug=False, loop=None, **kwargs):
          
          self.loop = loop or asyncio.get_event_loop()
          self._connection = connection
          self._session = SessionAsync(connection, loop=self.loop, **kwargs)
          try:
              self._cbs_auth = c_uamqp.CBSTokenAuth(
                  self.audience,
                  self.token_type,
                  self.token,
                  int(self.expires_at),
                  self._session._session,  # pylint: disable=protected-access
                  self.timeout,
                  self._connection.container_id)
              self._cbs_auth.set_trace(debug)
          except ValueError:
              await self._session.destroy_async()
              raise errors.AMQPConnectionError(
                  "Unable to open authentication session on connection {}.\n"
                  "Please confirm target hostname exists: {}".format(
                      connection.container_id, connection.hostname)) from None
          return self._cbs_auth
docs: Create the async AMQP session and the CBS channel with which
          to negotiate the token.
  
          :param connection: The underlying AMQP connection on which
           to create the session.
          :type connection: ~uamqp.async_ops.connection_async.ConnectionAsync
          :param debug: Whether to emit network trace logging events for the
           CBS session. Default is `False`. Logging events are set at INFO level.
          :type debug: bool
          :param loop: A user specified event loop.
          :type loop: ~asycnio.AbstractEventLoop
          :rtype: uamqp.c_uamqp.CBSTokenAuth