The Internet of Things (IoT) aims to interconnect our everyday life items. It provides them with information processing capabilities to enable computers to sense, integrate, present, and react to all aspects of the physical world. This move from interconnected computers to interconnected things requires simplifying the development of new applications and services by supporting interoperability among heterogeneous devices; so that the programmer can focus on the development of applications enabled by the infrastructure of IoT. Middleware is a software layer interposed between the infrastructure and the applications using it  that basically aims to support important requirements for these applications. This paper surveys existing middleware designed for IoT and focuses on various technical challenges in this domain.