async def METHOD_NAME(request: web.BaseRequest):
    """
    Request handler for creating an authorization token for a specific subwallet.
    Args:
        request: aiohttp request object
    """
    context: AdminRequestContext = request["context"]
    wallet_id = request.match_info["wallet_id"]
    wallet_key = None
    LOGGER.debug(f"wallet_id = {wallet_id}")
    # "builtin" wallet_create_token uses request.has_body / can_read_body
    # which do not always return true, so wallet_key wasn't getting set or passed
    # into create_auth_token.
    # if there's no body or the wallet_key is not in the body, or wallet_key is blank, return an error
    if not request.body_exists:
        raise web.HTTPUnauthorized(reason="Missing wallet_key")
    body = await request.json()
    wallet_key = body.get("wallet_key")
    LOGGER.debug(f"wallet_key = {wallet_key}")
    # If wallet_key is not there or blank return an error
    if not wallet_key:
        raise web.HTTPUnauthorized(reason="Missing wallet_key")
    profile = context.profile
    config = profile.inject(MultitenantProviderConfig)
    try:
        multitenant_mgr = profile.inject(BaseMultitenantManager)
        async with profile.session() as session:
            wallet_record = await WalletRecord.retrieve_by_id(session, wallet_id)
        # this logic is weird, a managed wallet cannot pass in a key.
        # i guess this means that a controller determines who can call this endpoint?
        # and there is some other way of ensuring the caller is using the correct wallet_id?
        if (not wallet_record.requires_external_key) and wallet_key:
            if config.errors.on_unneeded_wallet_key:
                raise web.HTTPBadRequest(
                    reason=f"Wallet {wallet_id} doesn't require the wallet key to be provided"
                )
            else:
                LOGGER.warning(
                    f"Wallet {wallet_id} doesn't require the wallet key but one was provided"
                )
        if not config.manager.always_check_provided_wallet_key:
            # if passed in, remove this wallet key from create auth token logic
            # since we are not going to check it.
            wallet_key = None
        token = await multitenant_mgr.create_auth_token(wallet_record, wallet_key)
    except StorageNotFoundError as err:
        raise web.HTTPNotFound(reason=err.roll_up) from err
    except WalletKeyMissingError as err:
        raise web.HTTPUnauthorized(reason=err.roll_up) from err
    except WalletKeyMismatchError as err:
        raise web.HTTPConflict(reason=err.roll_up) from err
    return web.json_response({"token": token})