I'm trying to figure out a way of making my API being able to associate a user from Facebook to my Identity users.
The application context
I'm developing a mobile application (In Xamarin) that needs to make login with Username/Password and with Facebook. I have already set the app.UseOpenIdConnectServer
configuration and created the custom Provider
so my application is already working with Username/Password.
Now I'm trying to make this integration with Facebook and not finding a way I can achieve this.
I was thinking in creating a service in the API like /api/auth/login-facebook/
passing the access-token
from Facebook but I need to return the access-token
of my API application to the mobile application so the mobile app could call all the other services that needs authorization.
Any help about that?
A visual way of what I'm trying to get:
- User press "Login with Facebook" in Mobile Application
- Mobile Application call the
/api/auth/login-facebook/
passing theaccess-token
from Facebook - In the API Application, I will check the
access-token
with theFacebook
package - If the user doesn't exists, I will create him with the data that Facebook returned me and after that I will generate the
access-token
to grant access to my API Application - If the user exists, I will generate the
access-token
to grant access to my API Application - Return the
access-token
to the Mobile Application so it can call the other services
If my knowledge is wrong and I should do this integration/login in another way, please fell free to tell me!
The flow you describe is very similar to "assertion grants", a flow that was standardized last year.
To use this flow, you usually have to retrieve a standard token from the external provider (e.g a JWT or a SAML assertion) so your own authorization server can validate it and extract the claims it exposes. Unfortunately, this is not something you can do with Facebook or with most social providers in general.
A new OAuth2 draft will likely help change that in the future, but it will probably take a while before major services start implementing it.
The good news is that nothing prevents you from creating your own "Facebook access token" grant type in the meantime. Here's how you could implement the assertion grant with ASOS beta6: