Javascript 不需要的谷歌智能锁
我在一个应用程序中有一些javascript代码,它通过iframe和硬编码凭证自动请求一个id_令牌和一个访问openid connect/oauth2端点的access_令牌 问题是,尽管用户无法看到表单,因为表单是静默进行的,但google smart lock会提示用户保存凭据,这是不可取的,主要是因为凭据是硬编码的,不需要记住,而且我们不希望用户看到这一点 有没有什么方法可以防止谷歌智能锁的代码显示出来,或者有什么方法可以避免这种情况 这是使用硬编码凭据执行的代码Javascript 不需要的谷歌智能锁,javascript,iframe,google-smartlockpasswords,Javascript,Iframe,Google Smartlockpasswords,我在一个应用程序中有一些javascript代码,它通过iframe和硬编码凭证自动请求一个id_令牌和一个访问openid connect/oauth2端点的access_令牌 问题是,尽管用户无法看到表单,因为表单是静默进行的,但google smart lock会提示用户保存凭据,这是不可取的,主要是因为凭据是硬编码的,不需要记住,而且我们不希望用户看到这一点 有没有什么方法可以防止谷歌智能锁的代码显示出来,或者有什么方法可以避免这种情况 这是使用硬编码凭据执行的代码 TokenManag
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;
});
您好,您是否找到了克服此问题的方法?如果用户没有看到表单,您能否简单地将输入类型更改为隐藏?这不应触发在浏览器中保存凭据。此外,您提到我们不希望用户看到这一点。如果敏感信息应该对用户隐藏,那么它首先就不应该到达浏览器。