I will assume that $P$ strictly contains the origin, if not we can simply translate all the vertices of $P$ appropriately. This is possible since one of the comments said that we can assume that $P$ is also full-dimensional. Consider the polar polytope of $P$ denoted by $P^0$, then
\begin{equation}
P^0 = \lbrace{ x \mid v_i^\top x \leq 1, \, \forall i = 1, 2 , \dotsc, n \rbrace}
\end{equation}
If my memory serves me correctly, there is a result concerning polar polyhedra that says that there is a 1:1 correspondence between facets of $P$ and vertices of $P^0$ (due to the lockdown I could not find a good reference to post here).
This means that it reduces to check whether the $a$ in the inequality $a^\top v \leq b$ in OP corresponds to a vertex of $P^0$. Of course, some scaling issues would need to be handled. If $a$ is a vertex, the also check whether $b = \underset{x \in P}{\text{max}} \,\, a^\top x$, otherwise the inequality does not touch $P$.
Finally, you can refer to my earlier answer to a question (Quadratic programming using CPLEX: how to check whether candidate is an extreme point?) on how to pose the problem of determining whether a given point is a vertex as a sequence of linear optimization problems.