I've been investigating SSO solution for SPAs for some time. There're a lot of solutions with subtle difference, while I also found not really everyone has the same understanding of SSO and not many established pattern of SSO for SPA are out there. Thus I'm not asking for a detailed design/architecture, but just try to see if there's any common practice on this topic.
What do I mean for SSO?
- We have a few new SPAs under development(also potentially mobile and tablet apps), which will be deployed in different servers and have different domains.
- We also have a central IdP (authServer) where all the user identify will be stored.
- Once I log into SPA1 and clicked a button which brings me to SPA2(or SPA3, SPA4, potentially), I don't have to enter user credentials and will be logged in automatically.
What's the difference for SPA? (as opposed to regular web app)
I've looked at a few solutions, even old solutions like SAML(just want to get a sense about SSO..). my current candidate is OpenId Connect, but then I realized a difference for SPA, if my understanding is correct: Unlike regular web apps, SPA usually doesn't have (or we try not to have) a backend server. What SPA has is just a server serving static pages along with scripts, style sheets, and images.
Now comes the problem:
OpenId Connect is based on OAuth2 Authorization Code grant type, which means either:
- I need a backend proxy-like module for each SPA if I want to make it work.
- I use a different solution to do client-side SSO, such as the one auth0 provides
- I haven't found any other solution/examples
My question:
For above point 1, is my understanding correct ? Is it better not to let SPA have backend code like a regular web app?
For above point2, that sounds like a solution, but how is that essentially different than OAuth2 Implicit grant type ?
And, are there other solutions(framework, protocol etc.) that I should know but haven't explored yet ?