为服务器端路由验证用户的最佳方法(最安全,最简单)是什么?
我使用的是最新的Iron Router 1. 和Meteor 1. ,首先,我使用的是Accounts-password。
我有一个简单的服务器端路由,可将pdf呈现到屏幕上:
两者/routes.js
Router.route('/pdf-server', function() {
var filePath = process.env.PWD + "/server/.files/users/test.pdf";
console.log(filePath);
var fs = Npm.require('fs');
var data = fs.readFileSync(filePath);
this.response.write(data);
this.response.end();
}, {where: 'server'});
举例来说,我想做些类似于该SO答案建议的操作:
在服务器上:
var Secrets = new Meteor.Collection("secrets");
Meteor.methods({
getSecretKey: function () {
if (!this.userId)
// check if the user has privileges
throw Meteor.Error(403);
return Secrets.insert({_id: Random.id(), user: this.userId});
},
});
然后在客户端代码中:
testController.events({
'click button[name=get-pdf]': function () {
Meteor.call("getSecretKey", function (error, response) {
if (error) throw error;
if (response)
Router.go('/pdf-server');
});
}
});
但是,即使我以某种方式使这种方法起作用,我仍然容易受到用户的攻击,只是他们输入了“ / pdf-
server”之类的URL,除非路由本身以某种方式检查了Secrets集合正确吗?
在Route中,我可以获取请求,并以某种方式获取标头信息?
Router.route('/pdf-server', function() {
var req = this.request;
var res = this.response;
}, {where: 'server'});
然后从客户端通过HTTP标头传递令牌,然后在路由中检查令牌是否来自Collection?
除了使用url令牌作为其他答案之外,您还可以使用Cookie:
添加一些允许您设置cookie并在服务器端读取它们的软件包:
meteor add mrt:cookies thepumpinglemma:cookies
然后,您便可以将Cookie与您的登录状态同步起来
客户端
Tracker.autorun(function() {
//Update the cookie whenever they log in or out
Cookie.set("meteor_user_id", Meteor.userId());
Cookie.set("meteor_token", localStorage.getItem("Meteor.loginToken"));
});
服务器端
在服务器端,您只需要检查此cookie是否有效(使用Iron路由器)
Router.route('/somepath/:fileid', function() {
//Check the values in the cookies
var cookies = new Cookies( this.request ),
userId = cookies.get("meteor_user_id") || "",
token = cookies.get("meteor_token") || "";
//Check a valid user with this token exists
var user = Meteor.users.findOne({
_id: userId,
'services.resume.loginTokens.hashedToken' : Accounts._hashLoginToken(token)
});
//If they're not logged in tell them
if(!user) return this.response.end("Not allowed");
//Theyre logged in!
this.response.end("You're logged in!");
}, {where:'server'});
我已经使用Spring boot zuul和eureka服务配置了我的微服务。现在我需要验证所有路由/REST API调用。我的意思是,对于所有API,客户端发送一个accessToken。在zuul服务上,在路由到特定服务之前,我必须使用accessToken调用一个微服务(auth服务),该auth服务将检查用户是否存在发送的accessToken。如果accessToken有效,则只应进行路
我们的应用程序中有两个部分: 服务器-提供REST服务 客户端-通过Spring restTemplate使用它们 除了HTTP状态之外,我们的服务器还返回一个包含JSON的HTTP正文,详细描述了错误。所以,我在restTemplate中添加了自定义错误处理程序,以将一些编码为非错误的错误处理——这有助于很好地解析HTTP正文。 但在HTTP/1.1 401未经授权的情况下,我通过解析HTTP主
它总是导致带有错误消息的catch块 登录失败:未知的用户名或错误的密码。失败:未知的用户名或错误的密码。 我确信给定的密码是正确的。 如何使用给定的密码验证用户名?
问题内容: 我是AngularJS的新手,在以下情况下我对如何使用angular-“ ui-router”感到有些困惑: 我正在构建一个包含两个部分的Web应用程序。第一部分是带有登录和注册视图的主页,第二部分是仪表板(成功登录后)。 我为home部分创建了一个带有角度应用程序和配置的,用于处理和查看,还有一个针对仪表板部分的文件,其应用程序和配置用于处理许多子视图。 现在,我完成了仪表板部分,并
我一直在搜索net,试图找到任何定义如何在流星和响应路由器4中处理身份验证的地方。 基本上,我希望某些路由只对经过身份验证的用户可用。有相关文件吗? 阿西尔
任务:将Kerberos active directory身份验证添加到不安全的报告和数据操作桌面应用程序。此应用程序是。。。 用Stackless Python 2.7编写 使用Twisted进行客户端-服务器交互 客户端编译为exe并在Windows上运行 服务器在Linux(红帽)上运行 目前,我们从用户帐户中提取Windows网络ID(登录名)并传递到服务器,服务器会查找用户配置为具有的权