We've used both PWM and LTB self-service password reset.
Both are good.
LTB is in php, simple and working and very easy to customize.
PWM is in Java, feature rich and much more than just a self-service.
Choosing a suitable one is defined by your needs. In many projects I prefer LTB.
Hope it helps