2013-04-23 5 views
2

Я пытаюсь получить доступ к Microsoft LiveConnect из Java webapp. И у меня проблема с получением жетонов.Microsoft Live Connect, REST Access Issue

Проблема заключается в следующем: Я последовал грант код авторизации расхода, как указано в http://msdn.microsoft.com/en-us/library/live/hh243647.aspx#authcodegrant

LiveConnect ли перенаправить пользовательский агент (браузер) к серверу с URL следующего формата

http://contoso.com/Callback.htm?code=AUTHORIZATION_CODE 

тогда мой веб-приложение выдает REST (запрос POST) в LiveConnect в следующем формате

POST https://login.live.com/oauth20_token.srf 

Content-type: application/x-www-form-urlencoded 

client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&client_secret=CLIENT_SECRET&code=AUTHORIZATION_CODE&grant_type=authorization_code 

Вместо возвращении некоторых значимых данных, LiveConnect возвращать HTML-страница содержит некоторую ненужную информацию, как этого

<html> 
... 
<body class="modern" onLoad="BodyLoad()"> 
<div class="header" id="i0272"><span>Microsoft account</span></div> 
<div class="content"> 
<div style="padding:15px 0 0 0;font-size:1px;">&nbsp;</div> 
<h1 class="css0046">We're unable to complete your request</h1> 

<p class="css0005">Microsoft account is experiencing technical problems. Please try again later.</p></div> 

Я также размещать здесь код Java, который включает в себя с REST API

URL urlConnection = new URL(this.url); 
    HttpURLConnection connection = (HttpURLConnection) urlConnection.openConnection(); 
    OutputStream outputStream = null; 
    try { 
     connection.setDoOutput(true); 
     connection.setDoInput(true); 
     connection.setRequestMethod("POST"); 
     connection.setReadTimeout(DEFAULT_READ_TIMEOUT_IN_MS); 
     connection.setUseCaches(false); 
     connection.setRequestProperty("charset", "utf-8"); 
     connection.setRequestProperty("Content-Length", "" + data.getBytes("UTF-8").length); 

     for(String key : params.keySet()){ 
      connection.setRequestProperty(key, params.get(key)); 
     } 

     executed.set(true); 

     connection.connect(); 

     outputStream = connection.getOutputStream(); 

     //outputStream.write("\r\n".getBytes("UTF-8")); 

     outputStream.write(data.getBytes("UTF-8")); 
     outputStream.flush(); 

     httpInputStream = connection.getResponseCode() != HTTP_OK ? 
       connection.getErrorStream() : 
       connection.getInputStream(); 

     return new Response(connection.getResponseCode(), Utils.fromInputStream(httpInputStream)); 

ответ

1

Адрес страницы с содержимым вашего форума может быть более значимым. Шахта это:

https://login.live.com/err.srf?lc=2057#error=invalid_request&error_description=The%20provided%20value%20for%20the%20input%20parameter%20%27redirect_uri%27%20is%20not%20valid.%20The%20expected%20value%20is%20%27https://login.live.com/oauth20_desktop.srf%27%20or%20a%20URL%20which%20matches%20the%20redirect%20URI%20registered%20for%20this%20client%20application.&state=redirect_type%3dauth%26display%3dpage%26request_ts%3d1412608929255%26response_method%3dcookie%26secure_cookie%3dfalse 

Убедитесь, что ваше приложение и OneDrive Dev Center Перенаправление оба имеют точно такой же URL, то есть:

http://contoso.com/Callback.htm

, который включает в себя страницу.

У меня такая же самая страница с ошибкой, с указанным выше URL, когда мой URL-адрес в OneDrive Dev Center не включал эту страницу. Установите переадресацию URL в:

https://account.live.com/developers/applications 

Войдите и попал в панель управления> Мои приложения> YourAppName> Настройки API

При разработке Вам также нужно перенаправить домен (contoso.com) к локальной IIS IP-адрес (127.0.0.1), как описано здесь: «http://msdn.microsoft.com/en-us/library/live/hh826547.aspx»

Надеется, что это помогает кто-то (я знаю, что это довольно поздний)