Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在web软件中启用辅助用户帐户_Javascript_Jquery_Ajax_Security_Authentication - Fatal编程技术网

Javascript 在web软件中启用辅助用户帐户

Javascript 在web软件中启用辅助用户帐户,javascript,jquery,ajax,security,authentication,Javascript,Jquery,Ajax,Security,Authentication,我有一些规范需要做一些工作才能确保它能够实现。我很高兴听到关于以下场景的评论和建议: 我需要一个用户登录的网络软件。所有用户都有一个用户帐户,并且可以有0-3个辅助用户帐户,在进行身份验证时,他们可以通过主网站使用这些帐户。辅助用户帐户由第三方javascript库控制,但我可以控制存储在数据库中的用户名和密码 目标是使用户不必多次进行身份验证,只需使用一个用户帐户,其他帐户应通过脚本自动工作 那么,有没有可行、安全和适当的方法来实现这一点?我知道在脚本中使用用户名和密码本身就是一个安全问题,但

我有一些规范需要做一些工作才能确保它能够实现。我很高兴听到关于以下场景的评论和建议:

我需要一个用户登录的网络软件。所有用户都有一个用户帐户,并且可以有0-3个辅助用户帐户,在进行身份验证时,他们可以通过主网站使用这些帐户。辅助用户帐户由第三方javascript库控制,但我可以控制存储在数据库中的用户名和密码

目标是使用户不必多次进行身份验证,只需使用一个用户帐户,其他帐户应通过脚本自动工作

那么,有没有可行、安全和适当的方法来实现这一点?我知道在脚本中使用用户名和密码本身就是一个安全问题,但如果做不好,我希望能找到下一个最好的方法。我将使用Asp.NETMVC作为平台,所有调用都使用ajax,因此该软件看起来和感觉上都像一个单页应用程序。不过,底层技术并不重要,任何服务器端技术都可以在这里使用

有一些选项可供选择:

  • 基本上,我可以使用任何用户名和密码进行身份验证,只是比较表中的哪些字段的问题
  • 我可以强制所有用户帐户的密码相同,这样用户就不必记住/使用许多密码
  • 我可以在登录调用中从db中检索辅助用户名,这样网站就可以访问辅助用户名,但显然我不能这样做,因为密码在db中是散列的
我一直在玩弄的一个想法是:

首先显示一个登录页面。身份验证通过ajax完成,凭证保存在登录表单上,当用户登录时,登录表单会被隐藏。在登录调用的成功回调事件中,我们可以显示ajax调用可以返回的主要内容(这可能类似于经过身份验证的用户的主页。由于原始凭据字段仍在页面上,因此可以通过脚本访问这些字段,并将其用于辅助系统凭据)

然而,我不相信这是一种安全的方式来处理二次系统登录,即使我可以在整个网站上使用https。我只是不知道这里的实际安全问题是什么。评论,专家?更好的方法来实现同样的

登录页面和主结构可能如下所示(一个非常简单的示例):


函数VerifyUser(名称、传递、记住、容器){
$.ajax({
键入:“POST”,
contentType:'application/json;charset=UTF-8',
url:“帐户/验证用户”,
数据:JSON.stringify({“userid”:name,“password”:pass}),
processData:false,
成功:功能(响应){
if(response.Success){
//如果需要的话,我可以把密码藏在这里。
//它在源代码中不可见,但可以通过jquery访问
$(#secondary pass').val(pass);
//这里我可以显示ajax调用可以返回的html数据,或者
//发送另一个ajax调用以分别检索实际内容。
//此处显示响应对象中ajax调用返回的数据。这可能是主页面等
$(“#主容器”).show();
$(“#maincainer”).html(response.Message);
$(“#logincontainer”).hide();
}
},
错误:函数(a、b、c){
$(“#主容器”).show();
$(“#maincainer”).html(a.responseText);
}
});
返回false;
}
登录
ajax调用可能会返回类似这样的结果

<script type="text/javascript" src="/Scripts/secondarysystem.js"></script>
<script type="text/javascript">
    function SecondaryLogin() {
        var data = {
            'username': 'mysecondaryusername',
            'pass': $("#secondarypass").val()   //NOTE here I could access the password-stash I set up earlier
        };

        var system = new SecondarySystem(); //This could be an object from the secondarysystem.js library
        system.LogIn(data);
        // this could have a onsuccessfullogin callback event, where we could populate some secondary system specific data to the div below
    }
</script>

<div id="secondarycontainer">
</div>

函数SecondaryLogin(){
风险值数据={
“用户名”:“mysecondaryusername”,
'pass':$(“#secondarypass”).val()//注意这里我可以访问我之前设置的密码库
};
var system=new SecondarySystem();//这可能是SecondarySystem.js库中的对象
系统登录(数据);
//这可能有一个onSuccessFullLogin回调事件,我们可以在其中向下面的div填充一些辅助系统特定的数据
}

在这个设置中,页面刷新会导致问题,但是我可以禁用f5(或者用重新加载正确的内容来替换它),并且至少添加一个对话框,说“刷新将强制您重新登录,确定要离开此页面吗?”等等。

你一直在玩弄的想法,听起来不错,我们很多人都在实践。你提到的一些问题你不想面对,如果你真的想让它成为一个单页应用程序,这里有几点你可以记住

1.刷新F5

如果刷新是您的问题,您可能可以使用localstorage,以便在页面刷新时不会丢失用户名和密码

  • 安全吗
  • 我认为你可以将你的密码变量加密保存,这样你只需要在需要验证用户身份时解密它。关于加密,你可以参考(URL更新)

    <script type="text/javascript" src="/Scripts/secondarysystem.js"></script>
    <script type="text/javascript">
        function SecondaryLogin() {
            var data = {
                'username': 'mysecondaryusername',
                'pass': $("#secondarypass").val()   //NOTE here I could access the password-stash I set up earlier
            };
    
            var system = new SecondarySystem(); //This could be an object from the secondarysystem.js library
            system.LogIn(data);
            // this could have a onsuccessfullogin callback event, where we could populate some secondary system specific data to the div below
        }
    </script>
    
    <div id="secondarycontainer">
    </div>