Пользователь нажимает на кнопку, вы берёте id юзера в фейсбуке он уникальный и другую инфу, так же можете взять access_token если хотите делать какие то запросы в фейсбук.
Далее, отсылаете id юзера на сервер он уникальный помните, смотрим если есть юзер с таким id от фейсбука. Если нет, значит - можно зарегестрировать юзера, делаем юзера и привязываем этот facebook id к нему. Всё теперь юзер зарегестрирован и к нему привязан facebook id.
Если он нажимает на кнопку в приложении - вы отсылаете facebook id и юзер с таким facebook id на сервере находится, можно считать это за логин и пропустить юзера в ваше приложение.
На пятый пункт, нет пароль передавать нельзя, при регистрации или логине (лучше при логине) генерируете юзеру уже свой access_token с которым он может обращаться к вашему серверу.
Свой access_token выдавать при логине или после регистрации.
Теперь когда у юзера есть access_token от вашего сервера, он может делать запросы к вашему api серверу. Это значит, что он должен присылать этот токен с каждым обращением к вашему серверу, как он будет это делать зависит от дизайна вашего api. У фейсбука это как параметр в URL.
Я предпочитаю, чтобы access_token присылали в http хедерах.
Примерно, так... Одним ответом тут не отписаться( Спрашивайте ответим.