0

Привет, Я пытаюсь использовать Microsoft OAuth, чтобы иметь возможность входить в систему с учетными данными Outlook внутри расширения chrome.Live connect on chrome extension

Я использую библиотеку javascript (https://msdn.microsoft.com/en-us/library/hh550844.aspx), но я не могу это сделать. Я делаю следующее.

WL.init({ 
    client_id: "foo_bar", 
    scope: "wl.signin", 
    redirect_uri:"http://www.contoso.com/redirect", 
    response_type: "token" }); 

, а затем

WL.login() 

, что происходит, что я перенаправлен на http://www.contoso.com/redirect , но когда я закрываю всплывающее окно я получаю следующее сообщение

[WL] WL. login: всплывающее окно закрывается без получения согласия.

Я думаю, проблема в redirect_uri, но как я могу это сделать с расширением хром?

+0

Документах есть образец OAuth. –

+0

Я знаю, но не работает – Lopes

+1

«Не работает» не заставит вас далеко ходить на s.o. –

ответ

0

Я, наконец, сделал это. Просто следуйте этим руководством

http://blogs.msdn.com/b/onenotedev/archive/2014/07/23/how-to-authenticate-with-microsoft-account-in-a-chrome-extension.aspx

и у вас есть код здесь

https://github.com/jameslau-MSFT/MSAuthFromChromeExtSample

высокого уровня шаги

Вот вещи, которые нужно сделать в высокопроизводительном уровень:

  1. Создайте идентификатор клиента и убедитесь, что настройки API установлены правильно.
  2. Правильно настройте расширение Chrome, чтобы использовать хотя бы 1 скрипт контента. Это нам понадобится в № 4 ниже.
  3. Создайте пользовательский интерфейс в своем расширении Chrome для входа в систему, убедившись, что вы правильно настроили URL-адрес перенаправления на «https://login.live.com/oauth20_desktop.srf» и тип ответа установлен на «токен».
  4. В своем сценарии содержимого расширения Chrome обратите внимание на всплывающее окно из потока входа учетной записи Microsoft. В нужный момент времени мы поймаем auth_token, сохраним его и закроем всплывающее окно.

Manifest должно быть что-то вроде этого

{ 
    "name": "MSAuthFromChromeExtSample", 
    "short_name": "MSAChromeExt", 
    "version": "1.0.0", 
    "description": "Chrome extension that demonstrates how to authenticate against Microsoft Account.", 
    /*"background":{ 
     "page": "background.html" 
    },*/ 
    "browser_action": { 
    /* "default_icon": {     
     "19": "./assets/icons/icon-19.png", 
     "38": "./assets/icons/icon-38.png" 
     },*/ 
     "default_title": "MSA Auth Sample", 
     "default_popup": "./html/popup.html" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["*://*/*"], 
     "js": ["lib/jquery.min.js", "js/script.js"], 
     "run_at" : "document_end" 
    } 
    ], 
    "permissions": ["history","tabs","storage", "webRequest", "notifications", "<all_urls>"], 
    "manifest_version": 2, 
    "update_url": "http://clients2.google.com/service/update2/crx", 
    "content_security_policy": "script-src 'self' https://js.live.net; object-src 'self'" 
} 

Несколько вещей отметить:

  • Мы включили JS/script.js как скрипт контента. Эти сценарии загружаются каждый раз, когда документ загружается в окно или вкладку. Нам нужно это, чтобы выполнить № 4 выше. Мы также включили lib/jquery.min.js в качестве сценария контента, потому что я хотел иметь возможность использовать jquery в файле script.js.
  • Мы включили «хранилище» в разрешениях, потому что позже мы будем использовать хранилище Chrome для хранения auth_token.
  • Мы включили эту строку: "content_security_policy": "script-src 'self' https://js.live.net; object-src 'self' ', поэтому библиотека JavaScript LiveSDK может быть успешно загружена из всплывающего окна.html
  • browser_action.default_popup установлен в "./html/popup.html" - это указывает HTML, который будет отображаться, когда пользователь нажимает кнопку расширения браузера. Мы будем использовать это, чтобы показать интерфейс входа в систему.

Войти код

$('a#signin').click(function() { 
    $('div#signin_status').text(''); 
    WL.init({ 
     client_id: "000000004410CD1A", // replace with your own Client ID!! 
     redirect_uri: "https://login.live.com/oauth20_desktop.srf", 
     response_type: "token" 
    }); 
    WL.login({ 
     scope: ["wl.signin", "office.onenote_create"] 
    }); 

    return false; 

}); 

Содержание сценария

$(window).load(function() { 

    if (window.location.origin == "https://login.live.com") { 

     var hash = window.location.hash; 

     // get access token 
     var start = hash.indexOf("#access_token="); 
     if (start >= 0) { 
      start = start + "#access_token=".length; 

      var end = hash.indexOf("&token_type"); 
      var access_token = hash.substring(start, end); 

      // Store it 
      chrome.storage.local.set({"access_token":access_token}); 

      // Close the window 
      window.close(); 
     } 
    } 
}); 
+1

Ответы только на ссылки не приветствуются в переполнении стека. Включите соответствующие части решения здесь. – Xan