Javascript 不需要的谷歌智能锁

Javascript 不需要的谷歌智能锁,javascript,iframe,google-smartlockpasswords,Javascript,Iframe,Google Smartlockpasswords,我在一个应用程序中有一些javascript代码,它通过iframe和硬编码凭证自动请求一个id_令牌和一个访问openid connect/oauth2端点的access_令牌 问题是,尽管用户无法看到表单,因为表单是静默进行的,但google smart lock会提示用户保存凭据,这是不可取的,主要是因为凭据是硬编码的,不需要记住,而且我们不希望用户看到这一点 有没有什么方法可以防止谷歌智能锁的代码显示出来,或者有什么方法可以避免这种情况 这是使用硬编码凭据执行的代码 TokenManag

我在一个应用程序中有一些javascript代码,它通过iframe和硬编码凭证自动请求一个id_令牌和一个访问openid connect/oauth2端点的access_令牌

问题是,尽管用户无法看到表单,因为表单是静默进行的,但google smart lock会提示用户保存凭据,这是不可取的,主要是因为凭据是硬编码的,不需要记住,而且我们不希望用户看到这一点

有没有什么方法可以防止谷歌智能锁的代码显示出来,或者有什么方法可以避免这种情况

这是使用硬编码凭据执行的代码

TokenManager.prototype.login = function(username, password, rememberMe) {
        var mgr = this;
        var formHtml = '<form name="form" id="loginForm" method="post" style="display: none"></form>';
        var form = $(formHtml).appendTo("body");
        form.attr("action", this.settings.loginUrl + '?signin=' + this.signinId());
        form.attr("target", this.settings.frameName);
        var a = $('<input name="idsrv.xsrf" type="hidden">').appendTo(form);
        var u = $('<input name="username" id="username" type="text">').appendTo(form);
        var p = $('<input id="password" name="password" type="password">').appendTo(form);
        var r = $('<input type="checkbox" id="rememberMe" name="rememberMe">').appendTo(form);
        var btn = $('<button type="submit" style="display: none"></button>').appendTo(form);
        u.val(username);
        p.val(password);
        r.val(rememberMe);
        var checked = '';

        if (rememberMe) {
            checked = 'checked';
        }

        r.attr('checked', checked);

        a.val(getCookie(TokenManager.xsrfKey));
        var oauth = new OAuthClient(this.settings);
        var frame = new FrameLoader('', this.settings.frameName);
        frame.load(function (data) {
            form.remove();
            if (data.type === 'login') {
                setCookie(TokenManager.xsrfKey, data.model.antiForgery.value, 1);
                setCookie(TokenManager.signInKey, data.signin, 1);
                this.showLogin(data.model, username);
            } else
                if (data.type === 'tokenCallback') {
                    var result = oauth.readImplicitResult(data.hash);
                    if (!result.error) {
                        var token = Token.fromOAuthResponse(result);
                        this.saveToken(token);
                        this.callTokenObtained();
                    }
                } else {
                    if (data.type === 'error') {
                        var request = oauth.createImplicitRequest();
                        frame = new FrameLoader(request.url, mgr.settings.frameName);
                        frame.load(function(d) {
                            if (d.type === 'login') {
                                setCookie(TokenManager.signInKey, d.signin, 1);
                                setCookie(TokenManager.xsrfKey, data.model.antiForgery.value, 1);
                                setTimeout(function() {
                                    mgr.login(username, password, rememberMe);
                                }, 0);
                            } else
                                if (d.type === 'tokenCallback') {
                                    var result = oauth.readImplicitResult(d.hash);
                                    if (!result.error) {
                                        var token = Token.fromOAuthResponse(result);
                                        mgr.saveToken(token);
                                        mgr.callTokenObtained();

                                    }
                                }
                        });

                    }
                }
        }.bind(this), function() {});

        btn.click();
    }
这是正在使用的FrameLoader.js

define(['jquery'], function ($) {

    function FrameLoader(url, frameName) {
        this.url = url;
        this.frameName = frameName;
    }

    FrameLoader.prototype.load = function(success, error) {
        var frameHtml = '<iframe name="' + this.frameName + '" style="display:none"></iframe>';
        var frame = $(frameHtml).appendTo("body");

        function cleanup() {
            window.removeEventListener("message", message, false);
            if (handle) {
                window.clearTimeout(handle);
            }
            handle = null;
            frame.remove();
        }

        function cancel(e) {
            cleanup();
            if (error) {
                error();
            }
        }

        function message(e) {
            if (handle && e.origin === location.protocol + "//" + location.host) {
                cleanup();
                if (success) {
                    success(e.data);
                }
            }
        }

        var handle = window.setTimeout(cancel, 10000);
        window.addEventListener("message", message, false);
        if (this.url)
            frame.attr("src", this.url);
    };

    return FrameLoader;
});

您好,您是否找到了克服此问题的方法?如果用户没有看到表单,您能否简单地将输入类型更改为隐藏?这不应触发在浏览器中保存凭据。此外,您提到我们不希望用户看到这一点。如果敏感信息应该对用户隐藏,那么它首先就不应该到达浏览器。