2013-02-13 3 views
1

У меня есть веб-сайт Azure, для которого требуется аутентификация ACSv2, которую я хочу получить из приложения winforms. Многие из моих клиентов используют Windows XP, поэтому я не могу использовать WIF (который недоступен в Windows XP). Каков наилучший способ получить токен аутентификации для моего веб-запроса в этом случае?Доступ ACS Azure от Winforms

ответ

1

Для настольных приложений, которые вы можете сделать следующее:

  1. Получить список поставщиков удостоверений из пространства имен ACS
  2. отображать их в элементе управления WebBrowser
  3. После входа пользователя в систему, получить маркер из элемента управления WebBrowser и проанализируйте его.

Это аналогично, если вы хотите использовать ACS в приложении Windows Phone. Я предлагаю вам взглянуть на это сообщение в блоге: Azure ACS on Windows Phone 7. И вот пример кода, который анализирует токен после входа пользователя через элемент управления WebBrowser (на WP7):

private void SignInWebBrowserControl_ScriptNotify(object sender, NotifyEventArgs e) 
{ 
    var acsResponse = ACSResponse.FromJSON(e.Value); 

    RequestSecurityTokenResponse rstr = null; 
    Exception exception = null; 
    try 
    { 
     string binaryToken = HttpUtility.HtmlDecode(acsResponse.securityToken); 
     string tokenText = RequestSecurityTokenResponseDeserializer.ProcessBinaryToken(binaryToken); 
     DateTime expiration = DateTime.Now + TimeSpan.FromSeconds(acsResponse.expires – acsResponse.created); 

     rstr = new RequestSecurityTokenResponse 
        { 
         Expiration = expiration, 
         TokenString = tokenText, 
         TokenType = acsResponse.tokenType 
        }; 
+0

Я хотел бы отметить это как ответ. Метод 'ValidateRequest' в обработчике событий' OnAuthenticateRequest' работает корректно, но запрос диспетчеру проверки подлинности на 'Authenticate' с созданным' ClaimsPrincipal' терпит неудачу. Принципал не является аутентификацией, и все шоу прекращается. Я полагаю, что это проблема конфигурации, но я не могу определить источник сбоя. –

+0

Хорошо. Я получил это, чтобы работать. Моя проблема (и я ее не понимаю) заключалась в том, что я отправлял веб-запрос «http: // localhost/contacts/Directory», как в примере, и был отправлен обратный вызов после аутентификации, один раз для этого URL-адреса (который аутентифицирован правильно и один раз для 'http: // localhost/contacts/Directory /', который этого не сделал. Я добавил косую черту в Url, и теперь тест работает. –

+0

Чтобы реализовать это как приложение winforms, мы должны изменить HttpUtility (для кодирования url), расположение хранилища маркеров и использование свойства ObjectViewScripting для веб-браузера для реализации уведомления. –

Смежные вопросы