Подтвердить что ты не робот

ASP.NET Web API 2: Как войти в систему с помощью внешних служб аутентификации?

Согласно этому сообщению http://www.asp.net/web-api/overview/security/external-authentication-services... Я могу войти в систему с помощью локальной службы аутентификации (с новым удостоверением ASP.NET фреймворк)

но я не могу найти пошаговое руководство для правильного вызова (из мобильного приложения или почтальона) веб-API по умолчанию, созданного в шаблоне Visual Studio 2013 SPA.

Может кто-нибудь мне помочь?

4b9b3361

Ответ 1

Сегодня у меня была та же проблема, и я нашел следующее решение:

Сначала получите всех доступных поставщиков

GET /api/Account/ExternalLogins?returnUrl=%2F&generateState=true

Ответное сообщение представляет собой список в формате json

[{"name":"Facebook",
  "url":"/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1",
  "state":"QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1"}]

Теперь отправьте запрос GET на адрес провайдера, который вы хотите использовать. Вы будете перенаправлены на страницу входа внешнего поставщика. Заполните свои учетные данные, и вы будете перенаправлены обратно на ваш сайт. Теперь проанализируйте access_token по URL-адресу.

http://localhost:15359/#access_token=[..]&token_type=bearer&expires_in=[..]&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1

Если у пользователя уже есть локальная учетная запись, cookie .AspNet.Cookies установлен, и все готово. Если нет, настроен только файл cookie .AspNet.ExternalCookie, и вы должны зарегистрировать локальную учетную запись.

Существует api, чтобы узнать, зарегистрирован ли пользователь:

GET /api/Account/UserInfo

Ответ

{"userName":"xxx","hasRegistered":false,"loginProvider":"Facebook"}

Чтобы создать локальную учетную запись для пользователя, вызовите

POST /api/Account/RegisterExternal
Authorization: Bearer VPcd1RQ4X... (access_token from url)
Content-Type: application/json
{"UserName":"myusername"}

Теперь отправьте тот же запрос с URL-адресом провайдера, как и раньше

GET /api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1

Но на этот раз пользователь уже имеет учетную запись и получает аутентификацию. Вы можете проверить это, вызвав /api/Account/UserInfo снова.

Теперь извлеките access_token из URL-адреса. Вы должны добавить заголовок Authorization: Bearer [access_token] для каждого вашего запроса.

Ответ 2

Я нашел еще один пост, в котором подробно описывается, как работает эта внешняя аутентификация. Клиент - WPF, а сервер использует идентификатор ASP.NET.

Ответ 3

Для тех, кто пытается использовать внешний доступ через Web Api 2 через Facebook в приложении для Android, этот пост объясняет только первую часть того, что мы должны сделать. Вот очень пояснительная ссылка всей картины:

[ Аутентифицированный доступ к WebAPI через токен Facebook из приложения Android