Еще раз я застрял! Я пытаюсь внедрить безопасный сервис WebApi с идентификатором ASP.NET с использованием индивидуальной учетной записи. Услуга WebApi будет потребляться мобильным приложением, разработанным с помощью телефонного разговора. Мое приложение для телефонных разговоров использует facebook и twitter для входа, и я реализовал это на клиенте отлично.Идентификация ASP.NET с использованием WebApi & External Login
Я создал проект SPA из шаблона визуальной студии, и я протестировал процесс входа в систему, отслеживая HTTP-запросы с помощью инструментов fiddler и chrome dev. Я попытался следующие запросы с помощью почтальона
ПОЛУЧАЕТ: http://localhost:49577/api/Account/ExternalLogins?returnUrl=/&generateState=true
ОТВЕТ:
[{
"Name": "Facebook",
"Url": "/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A49577%2F&state=jpePf27F3ufkCCEldFdoOVMEGBGTEO1CrRdUQ3bHEP01",
"State": "jpePf27F3ufkCCEldFdoOVHSGBGTEO1CrRdUQ3bHEP01"
}]
, а затем я называю GET: http://localhost:49577/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A49577%2F&state=jpePf27F3ufkCCEldFdoOVMEGBGTEO1CrRdUQ3bHEP01
, который вызывает метод GetExternalLogin из AccountsController. Затем он возвращает экземпляр ChallengeResult, когда пользователь не аутентифицирован.
Здесь я застрял. Q1: ChallengeResult заставляет 301 переадресовать на страницу входа в facebook с некоторыми параметрами querystring. Я не хочу этого, я хочу, чтобы он дал мне параметры, но позвольте мне обработать ведение журнала в моем запросе ajax. Я попытался закомментировать эту строку кода
Request.GetOwinContext().Authentication.Challenge(LoginProvider);
, но я в конечном итоге получить 401 с чем-то еще, как я могу контролировать то, что ответ от ChallegeResult?
Q2. Кроме того, я не могу понять, что дальше отсюда, после того, как я получу токен доступа из facebook, какую конечную точку webapi я должен вызвать, если я уже получил токен доступа, что мне следует передать ему?
У меня есть googled весь день, но я не могу найти ничего, что отвечает на мой вопрос. Любая помощь будет оценена по достоинству. Благодаря
UPDATE:
Что касается Q2; Я понял, следующий шаг, и это GET: http://localhost:49164/signin-facebook?code=...&state=...
Это возвращает другой 302, который перенаправляет на
http://localhost:49164/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A49164%2F&state=7oGPd37EA-nmtXPtYEQ40qnretDeKjbPEM1gNkb2DuM1
, который в свою очередь, возвращает другой 302, который затем перенаправляет
http://localhost:49164/#access_token=...
Так как обрабатывать ли я все переадресации с мобильного клиента без браузера?
UPDATE
Я пытаюсь найти действие контроллера, который обрабатывает http://localhost:49164/signin-facebook?code=...&state=...
Может кто-нибудь помочь?
UPDATE я с тех пор этот вопрос размещения узнал много о потоке facebool входа в систему, которая может быть, я должен был сделать раньше! У меня все еще есть один вопрос, но я создал a different question for that here, чтобы сдержать беспорядок
I Я тоже борюсь с этим ... У меня есть приложение angularJs, и я пытался сделать FB логин без WebApi, используя только FB JS SDK. Но опять же, я застрял в том, где передавать данные аутентификации, полученные от Facebook. Вот мой вопрос для справки: http://stackoverflow.com/questions/22846510/handling-server-redirect-to-facebook-login-page-in-angularjs –