Roadkill Auth Process

UtahID

Client Server
Oauth login to get auth code.
Send auth code Exchange auth code for token from UtahID and return it to client
Send user info to API login
— all future requests —
Sends access token header Validate token with userinfo UtahID endpoint
Caches tokens in Firestore if they are not expired so that we don’t hammer userinfo endpoint.
If access token is expired, send refresh token to server exchanges refresh token for new access token

Google

Client Server
Oauth login (auto exchanges code for token on the front end)
Get user props via google userinfo endpoint
Send user info to API login
— all future requests —
Sends access token header Validate token with userinfo google endpoint.
If access token is expired, kick off Oauth again. (I wonder if there is a refresh code that we could use rather than prompting for login again)

Facebook

Client Server
Oauth login
Use FB API to get access token
Get user info via graphQL FB api
Send user info to API login
— all future requests —
Sends access token header Validate token via graphQL /me endpoint
FB API takes care of refreshing token for us

Apple

Client Server
Login returns auth code, identity token, and user email/name on first request
Send auth code & identity token Verify identity token, exchange code for access token
Send user info to API login
— all future requests —
Send id token header Check that it matches cached version from auth code exchange above or a cached refresh token
If expired, request new token from server Use cached refresh token to get a new id token