2012-05-23 2 views
1

Я работал с OAuth2, чтобы предоставить методы аутентификации на моем сайте asp.net 4.0, используя C# в коде. Недавно я заметил, что Windows Live api больше не работает в коде, который я сделал. Он делает вызов и получает токен доступа из Live, но затем я застрял. Он добавляет # в начале строки запроса он посылает обратно, так что я есть следующий тип URL отправить обратно мне житьWindows Live API oauth 2. Чтение строки запроса, содержащей page.aspx? # Access_token = fhuevhkfu3q9

... mypage.aspx? # Access_token = 43t78fehef83jfvwenj3 ...

Раньше до добавления # я просто возвращал строку запроса и разбирал токен доступа с помощью следующей команды.

accessToken = Request.QueryString ["access_token"];

С добавлением хэша, хотя я больше не могу получить этот запрос, поскольку хеш-код обманывает страницу, думая, что это якорь. Когда я проверил свои локальные переменные отладки, я всегда получаю пустое верификацию и не выясню, как заставить ее дать мне фактическую строку, чтобы я мог ее проанализировать для токена доступа.

Любые идеи о том, как получить запрос?

Благодаря

ответ

0

URL-адрес хэш-фрагмент (часть после #) не посылается из браузера агента пользователя на веб-сервер. Таким образом, вам понадобится код на стороне клиента (вероятно, JavaScript) для его анализа и отправки его на ваш сервер.

Вот некоторые простой код, который разбирает хэш-фрагментов Params и помещает их в массив JavaScript:

// parse the query string 
// from http://oauthssodemo.appspot.com/step/2 
var params = {}, queryString = location.hash.substring(1), 
    regex = /([^&=]+)=([^&]*)/g, m; 
while (m = regex.exec(queryString)) { 
    oauthParams[decodeURIComponent(m[1])] = decodeURIComponent(m[2]); 
} 

Вы можете использовать AJAX или другие методы, чтобы передать эти значения обратно на свой веб-сервер, где вы можете проанализируйте их, если вам нужен сервер токена доступа.

Конечно, если весь ваш код на стороне сервера, вы можете также использовать поток кода авторизации доступные в Windows Live:

http://msdn.microsoft.com/en-us/library/live/hh243647.aspx#authcodegrant

Это позволяет получить код авторизации в главном запросе string (?code=foo), а затем выполните вызов от сервера к серверу от Microsoft до обмена этим code на access_token.