打开chrome.identity.launchWebAuthFlow作为标签(Chrome扩展程序)

时间:2016-07-01 19:14:16

标签: javascript google-chrome google-chrome-extension oauth google-chrome-app

我使用chrome.identity.launchWebAuthFlow()指导用户在使用我的扩展程序时通过非Google API的OAuth2。

即使身份验证有效且我可以有效地获取用户的身份验证令牌,但我不喜欢它完全在缺少浏览器UI和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>

1 个答案:

答案 0 :(得分:0)

您将无法在弹出窗口中使用OAuth流程,但有full walkthrough用浏览器标签自行控制流量。