@mike
You could see if your usual development languages have an #auth strategy that can talk with a #ApereoCAS server?
https://github.com/apereo/cas/blob/master/README.md
https://apereo.github.io/2018/10/25/why-you-should-choose-cas-as-your-sso-system/
https://en.wikipedia.org/wiki/Central_Authentication_Service
For Ruby that for instance could be OmniAuth-CAS https://github.com/dlindahl/omniauth-cas
or CASino http://casino.rbcas.com