Is that it?
Also...why is this not wrapped in a library such that it wouldn't be possible to make such a mistake?
I'm saying that Facebook should in all cases respond with "Nope, that's not a valid token". Their API just shouldn't have a way to get data on a user without providing a valid token (by valid, we mean valid for that purpose, not stolen from somewhere).
> In steps 6-7: > randomsite.com reads the token from the URL and uses it to talk directly with Facebook using the following API:
> https://graph.facebook.com/me?fields=id,name,email&access_to....
> The response is john@gmail.com.
So you send the token only and the token is valid, and there's no way for Facebook to check if it was meant for you or not. As mentioned in other posts, this would not happen in other flows because you would send e.g. your client secret along with the code.