async def METHOD_NAME(
    self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None, **kwargs: Any
) -> AccessToken:
    """Get an access token for `scopes` from the shared cache.
    If no access token is cached, attempt to acquire one using a cached refresh token.
    This method is called automatically by Azure SDK clients.
    :param str scopes: desired scopes for the access token. This method requires at least one scope.
        For more information about scopes, see
        https://learn.microsoft.com/azure/active-directory/develop/scopes-oidc.
    :keyword str claims: additional claims required in the token, such as those returned in a resource provider's
        claims challenge following an authorization failure.
    :keyword str tenant_id: optional tenant to include in the token request.
    :keyword bool enable_cae: indicates whether to enable Continuous Access Evaluation (CAE) for the requested
        token. Defaults to False.
    :return: An access token with the desired scopes.
    :rtype: ~azure.core.credentials.AccessToken
    :raises ~azure.identity.CredentialUnavailableError: the cache is unavailable or contains insufficient user
        information
    :raises ~azure.core.exceptions.ClientAuthenticationError: authentication failed. The error's ``message``
      attribute gives a reason. Any error response from Azure Active Directory is available as the error's
      ``response`` attribute.
    """
    if not scopes:
        raise ValueError("'get_token' requires at least one scope")
    if not self._client_initialized:
        self._initialize_client()
    is_cae = bool(kwargs.get("enable_cae", False))
    token_cache = self._cae_cache if is_cae else self._cache
    # Try to load the cache if it is None.
    if not token_cache:
        token_cache = self._initialize_cache(is_cae=is_cae)
        # If the cache is still None, raise an error.
        if not token_cache:
            raise CredentialUnavailableError(message="Shared token cache unavailable")
    account = self._get_account(self._username, self._tenant_id, is_cae=is_cae)
    token = self._get_cached_access_token(scopes, account, is_cae=is_cae)
    if token:
        return token
    # try each refresh token, returning the first access token acquired
    for refresh_token in self._get_refresh_tokens(account, is_cae=is_cae):
        token = await self._client.obtain_token_by_refresh_token(
            scopes, refresh_token, claims=claims, tenant_id=tenant_id, **kwargs
        )
        return token
    raise CredentialUnavailableError(message=NO_TOKEN.format(account.get("username")))