This is a cool question. I'm not going to address the 2FA. But regarding authentication between 2 separate webapps I think JWT and CORS and a little client side JS is your solution.
JWT is a simple(r) solution for token based authentication.
Cors allows for Cross-Origin Resource Sharing', cause AppA my . In this case making ajax requests to an non originating domain.
About both: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS https://github.com/dwyl/learn-json-web-tokens
It looks a little complicated, but 2 Laravel packages help a lot. https://github.com/barryvdh/laravel-cors
https://github.com/tymondesigns/jwt-auth
So the idea (a common one likely):
- make an authentication request on page load via ajax.
- if the user is authenticated then off they go. perhaps refresh token ttl
- if not, well they need to authenticate, make a request to say /authenticate and on success store the jwt token on the client. where ** AppA curls out to the authentication server ** AppB same. ** OR, best use CORS to directly authenticate w/ authentication server
- once they have an authenticated JWT token
- then off they go, all guarded requests from there on are now authorized via jwt.
I think that sounds right.