2012-05-21 2 views
0

Я новичок в ACS, WIF и федеративном файле идентичности в целом, но я работал с примерами в WIF SDK (и образцы ACS, а также), но у меня возникла проблема с использованием службы REST ASP.NET MVC на базе WebAPI (размещенной на Azure), где я настроил ACS как FP. Если я использую свой браузер для проверки службы REST (http://jordan-helloacs.cloudapp.net), я получаю традиционную «пассивную аутентификацию» и могу войти в систему через Live ID или Google (который я установил как два IP в ACS).Неисправность с использованием ACS с «пассивным активным» сценарием для использования службы REST ASP.NET MVC на основе WebAPI

Однако я пытаюсь добиться «пассивно-активный» опыт с помощью простого приложения WPF, получающего доступные IP-адресов с помощью

«https: // [myACSnamespace] .accesscontrol.windows ? .net/v2/метаданные/IdentityProviders.js протокол = javascriptnotify & область = HTTP: //jordan-helloacs.cloudapp.net/ & версия = 1,0" ,

конечных точек на ОКС позволяет получить список IP-адресов, а затем размещает элемент управления WebBrowser для обработки входа в этот IP-адрес и извлекает токен ACS, который i s, возвращенный из ACS, а затем (используя RestSharp) делает GET-вызов моей конечной точке на http://jordan-helloacs.cloudapp.net. Я успешно извлек токен (я пробовал как SWT, так и SAML2), но я не могу понять, что мне нужно сделать с токеном, как только я получил его из элемента управления WebBrowser. Я видел несколько разных примеров, где токен добавляется либо с «OAUTH», либо «WRAP access_token =» и просто передается в заголовке «Авторизация», но я ничего не делаю, кажется, работает. Мой клиент RestSharp просто продолжает получать 302'd на странице входа ACS.

Любые советы о том, что я могу делать неправильно? Как узнать, как указать формат заголовка auth?

ответ

0

Я пишу больше информации о том, как передать SWT токен либо в заголовке HTTP или через строку запроса или в форме, как показано ниже:

Если вы передаете лексемы в заголовке HTTP должны использовать заголовок «Authorization» , с этим значением заголовка, содержащим текст: WRAP access_token = "tokenstring" и не нуждается в кодировке URL.

string headerValue = string.Format("WRAP access_token=\"{0}\"", HttpUtility.UrlDecode(token)); 
var client = new WebClient();    
client.Headers.Add("Authorization", headerValue); 

Если вы передаете лексемы либо «Строка запроса» или в содержании «форма», то вы должны использовать имя/значение пару, как wrap_access_token = tokenstring и должны быть URL кодируется для построения запроса HTTP:

var values = new NameValueCollection(); 
values.Add("wrap_access_token", token); 
var client = new WebClient(); 
client.UploadValues("BartenderWebservice", "POST", values)); 

Вы можете использовать любой из приведенных выше методов, а затем передать поток своему клиенту, как показано ниже, и после его отправки используйте Fiddler или другую утилиту, чтобы проверить правильность заголовка.

Stream stream = client.OpenRead(@"http://yourwcfservice.cloudapp.net/RESTfulWCFServiceEndPoint.svc/_users_"); 
StreamReader reader = new StreamReader(stream); 
String response = reader.ReadToEnd(); 

Как вы сказали, что вы получите 302 ошибку (Forward к URL ACS) при подключении к RestFulWCF конечной точке. Фактически вы можете использовать RDP для своей Azure VM и посмотреть журнал событий приложения для получения дополнительной информации об этой ошибке, только если у вас включена регистрация журнала IIS. Я вижу, что эта ошибка регистрируется в журнале событий и предоставляет дополнительную информацию о том, почему это произошло. Может быть, некоторые настройки в вашем web.config вызывают эту проблему.

Добавлено Позже

В сценарии САШ MVC в конце получить маркер, печенье создается, а затем печенье является то, что передается в ASP Net приложение с указанием подлинности.На верхнем уровне вам нужно будет симулировать что-то подобное, чтобы заставить его работать.

Примечание: ни в коем случае это не точный ответ, однако я должен был использовать это пространство «как ответ», чтобы написать форматированный комментарий, чтобы лучше выразить.

+0

302 не является ошибкой, это то, что WIF автоматически направляет меня на страницу входа в ACS, когда я не аутентифицирован. Проблема в том, что я * am * authenticated - я просто не знаю, как передать токен ACS в службу. – Jordan0Day

+0

Да, 302 - перенаправление. Может быть, вам действительно нужно использовать Message Inspector или что-то в этом роде: http: //stackoverflow.com/questions/2605140/wcf-how-to-pass-token-for-authentication – AvkashChauhan

+0

Наверное, я в замешательстве? Я не использую WCF, я использую ASP.NET MVC WebApi ... насколько я могу сказать, что 302 является результатом стандартного WIF-кода (предположительно, WSFederationAuthenticationModule), который добавляется в web.config после выполнения «Добавить ссылку STS» в VS. – Jordan0Day

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

  • Нет связанных вопросов^_^