2014-01-13 1 views
10

Еще раз я застрял! Я пытаюсь внедрить безопасный сервис 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, чтобы сдержать беспорядок

+0

I Я тоже борюсь с этим ... У меня есть приложение angularJs, и я пытался сделать FB логин без WebApi, используя только FB JS SDK. Но опять же, я застрял в том, где передавать данные аутентификации, полученные от Facebook. Вот мой вопрос для справки: http://stackoverflow.com/questions/22846510/handling-server-redirect-to-facebook-login-page-in-angularjs –

ответ

2

Ответ на этот вопрос очень подробный. Чтобы облегчить это, я собираюсь указать вам пример, который показывает вам, как вы можете иметь приложение SPA и подключать разные клиенты (телефон, планшеты и т. Д.) И логин с помощью социальных входов, таких как Facebook и т. Д. https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/Todo/ReadMe.txt