2

我使用chrome.identity.launchWebAuthFlow(),當他們使用我的分機直接通過非谷歌的API的OAuth2用戶。打開chrome.identity.launchWebAuthFlow作爲接頭(Chrome擴展)

即使驗證工作,我可以有效地獲取用戶的身份驗證令牌,我不喜歡它在缺乏瀏覽器的用戶界面和URL欄的新窗口完全打開。

理想情況下,我將能夠擴展的彈出窗口內進行此OAuth技巧。如果這不起作用,至少能夠在單獨的選項卡中執行此OAuth事件是另一種解決方案。

眼下,用戶會點擊擴展開闢彈出。在彈出窗口中,有一個按鈕,他們將點擊以激活OAuth。從這裏,彈出一個完整的窗口,但我希望它保持在彈出窗口內(參見上文)。

我怎樣才能做到這一點?我已經看到很多關於它的討論,但沒有解決方案。

謝謝!

的manifest.json

{ 
    "manifest_version": 2, 
    "name": "Extension", 
    "version": "0.0.1", 
    "permissions": [ 
     "identity", 
     "tabs", 
     "http://*/*", 
     "https://*/*" 
    ], 
    "browser_action":{ 
     "default_icon": "icon.png", 
     "default_popup" : "popup.html" 
    }, 

    "background": { 
     "scripts": ["background.js"] 
    } 
} 

background.js

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse){ 
     if(request.message==="start_oauth"){ 
      chrome.identity.launchWebAuthFlow(
       { 
        "url" : "https://example.com/manage/oauth2/authorize?callback_uri=" 
        +encodeURIComponent(<callback_uri>) 
        +"&client_id=" + <client_id> 
        +"&response_type=code", 
       "interactive" : true 
       }, 
       function(redirect_url){ 
        var auth_token = redirect_url.substr(<callback_uri>.length+6); 
       } 
      ); 
     } 
    } 
); 

popup.js

function startOAuth(){ 
    chrome.runtime.sendMessage({"message": "start_oauth"}); 
} 
document.getElementById("login").addEventListener("click", startOAuth); 

popup.html

<html> 
    <body> 
     <button id="login"> Click here to log in</button> 
    </body> 
    <script src="popup.js"></script> 
</html> 

回答

0

您將無法獲得的OAuth流在彈出的工作,但有控制與瀏覽器標籤流自己的full walkthrough

+0

這是演練不幸的是,您好!OAuth1和過時的。 – user2494584

+0

選項卡的處理將是相同的。只需將OAuth 1代碼替換爲OAuth 2代碼即可。 – abraham