docs: def login(self, authc_token):
          """
          :type authc_token: authc_abcs.AuthenticationToken
  
          authc_token's password is cleartext that is stored as a bytearray.
          The authc_token password is cleared in memory, within the authc_token,
          when authentication is successful.
          """
          self.clear_run_as_identities_internal()
          # login raises an AuthenticationException if it fails to authenticate:
          subject = self.security_manager.login(subject=self,
                                                authc_token=authc_token)
          identifiers = None
          host = None
          if isinstance(subject, DelegatingSubject):
              # directly reference the attributes in case there are assumed
              # identities (Run-As) -- we don't want to lose the 'real' identifiers
              identifiers = subject._identifiers
              host = subject.host
          else:
              identifiers = subject.identifiers  # use the property accessor
  
          if not identifiers:
              msg = ("Identifiers returned from security_manager.login(authc_token" +
                     ") returned None or empty value. This value must be" +
                     " non-None and populated with one or more elements.")
              raise ValueError(msg)
  
          self._identifiers = identifiers
          self.authenticated = True
  
          if not host:
              try:
                  host = authc_token.host
              except AttributeError:  # likely not using a HostAuthenticationToken
                  host = None
          self.host = host
  
          session = subject.get_session(False)
          if session:
              session.stop_session_callback = self.session_stopped
              self.session = session
          else:
              self.session = None