Как разработать REST-сервис с аутентификацией пользователей с помощью Azure ACS - PullRequest
5 голосов
/ 04 октября 2011

Я занимаюсь разработкой службы REST, которая использует MS Azure Access Control Service для проверки подлинности. Если в примерах есть какое-либо указание, типичным способом защиты службы REST таким способом будет предоставление глобального имени пользователя и pw, личного ключа или сертификата X.509 для защищенной службы. Однако я хочу использовать пассивный пользователь механизм входа в систему на мобильном устройстве с потоком, похожим на следующий:

  1. Неаутентифицированный пользователь пытается получить доступ к защищенному сервису из приложения
  2. Мобильное приложение перенаправляет в приложение браузера (или встроенный браузер)
  3. Пользователь выбирает провайдера идентификации для входа в систему (Facebook, Google и т. Д.) Со страницы входа в ACS
  4. Пользователь вводит учетные данные для провайдера идентификации
  5. Браузер перенаправляет обратно в приложение
  6. Приложение каким-то образом получает токен SWT для использования с последующими запросами REST.

Я застрял на шаге 5 - получении токена SWT, и существующие примеры, которые я обнаружил, похоже, не соответствуют этому сценарию. Кроме того, я на самом деле пытаюсь создать концептуальную концепцию с помощью настольного клиента в WPF, что может усложнить ситуацию. Может ли кто-нибудь предложить конкретное учебное пособие или путь, который использует аутентификацию для каждого пользователя по сравнению с услугой? Спасибо.

EDIT: По мере того как я углубляюсь в это, я понял, что примеры, приведенные ниже (и большинство других), основаны на OAuth WRAP, который устарел в пользу OAuth 2.0. Кто-нибудь может предложить более актуальную ссылку? Поиск в Google прибавил http://blogs.msdn.com/b/adventurousidentity/archive/2011/09/18/acs-v2-oauth-2-0-delegation-support-explained.aspx и http://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=32719, но они не самые интуитивные.

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

Вы должны посмотреть на образец ACS Windows Phone:

http://msdn.microsoft.com/en-us/library/gg983271.aspx

Здесь вместо Silverlight вы будете использовать WPF. Большая часть кода должна использоваться повторно. Обратите внимание, что, поскольку вы используете WPF, вам нужно зарегистрировать свой собственный объект для сценариев, например:

[ComVisibleAttribute(true)]
public class NotifyHandler
{
    public void Notify(string notifyString)
    {
        // Here I have the token.
    }
}

this.webBrowser1.ObjectForScripting = new NotifyHandler();

Обновление:

В приведенном выше примере используется OAuth Wrap для связи с защищенной службой. Если вы хотите использовать OAuth2, вам следует изменить способ установки заголовка «Авторизация»:

OAuth WRAP case:

 WebClient client = new WebClient();
 client.Headers["Authorization"] = "OAuth " + _rstrStore.SecurityToken;

OAuth2 case:

 WebClient client = new WebClient();
 client.Headers["Authorization"] = string.Format("OAuth2 access_token=\"{0}\"", token);

Вы можете использовать образец "Simple Service" в качестве руководства для реализации проверки вашего токена в службе REST:

http://msdn.microsoft.com/en-us/library/gg185911.aspx

Однако, если вы хотите реализовать более полный пример, вы можете посмотреть, как CustomerInformationService защищен в CTP версии 1.4:

https://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=35417

0 голосов
/ 04 октября 2011

Взгляните на это:

Приложение WPF с Live ID, Facebook, Google, Yahoo !, Open ID http://social.technet.microsoft.com/wiki/contents/articles/4656.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...