为用户和身份验证使用解析服务器并调用其他内部 REST Web 服务
Posted
技术标签:
【中文标题】为用户和身份验证使用解析服务器并调用其他内部 REST Web 服务【英文标题】:Using parse-server for users and auth and call other internal REST web service 【发布时间】:2016-05-05 16:45:27 【问题描述】:我们计划在内部托管解析服务器,以便为我们正在构建的新移动应用程序提供内容服务。
除了我们在 parse 中构建的内容之外,我们还希望我们的移动客户端使用一些内部 REST 服务。 我想利用解析服务器用户、身份验证和会话管理来调用这些内部 REST 服务。
我发现云代码功能非常有限,因为它们只接受 POST,我想要一个更 RESTful 的 api 供客户端使用,将 1-1 映射到内部服务,这样我就可以传递请求. 我创建了一个与解析服务器一起运行的快速中间件函数,它只接受传入请求、更改基本 url、添加新标头(与身份验证相关)和路由/代理请求到内部 web 服务。
首先,是否有可能获得一个解析客户端 api 来调用这个其他快速端点? 其次,在服务器端,验证此调用的最佳方式是什么。
我创建了一个简单的 node.js 测试文件,在其中我使用 javascript/node api 登录到解析服务器,然后在休息客户端的标头中设置用户会话令牌以调用这个新端点,但正在寻找反馈或更好的方法。
var express = require('express');
var request = require('request');
var ParseServer = require('parse-server').ParseServer;
...
var api = new ParseServer(
...
);
app.use('/parse', api);
// Middleware function to auth request against parse and forward to other web service
app.use('/api/', function (req, res, next)
var currentToken = req.headers['x-parse-session-token'];
//TODO, validate user token.. HOW BEST?
if (currentToken)
// Query Parse for some user related data to add to request
// Modify request and forward to other web service
var newUrl = apiServerHost + req.baseUrl;
req.pipe(request(newUrl)).pipe(res);
else
res.send('Unknown parse user');
);
...
【问题讨论】:
请注意您在哪里看到 Cloud Code 只接受请求。 parse.com/docs/cloudcode/guide#cloud-code-advanced 要调用云代码函数,解析 api 会向 yourapp.com./parse/functions/yourfunctionname 发送 POST。然后,您当然可以使用 HttpRequest 库从云函数中进行 GET/PUT 等操作,但是您首先要使用客户端的 POST 来启动调用。 对。我想我从字面上解释了你的评论,就像 only accept 【参考方案1】:所以。我刚刚创建了一个快速中间件函数来检查 x-parse-session-token 标头,然后调用 /parse/users/me。
app.use(function (req, res, next)
unirest.get(env.getParseURL() + '/users/me')
.headers(
'X-Parse-Application-Id': env.getApplicationId() ,
'X-Parse-REST-API-Key': env.getRestApiKey(),
'X-Parse-Session-Token': req.header("x-parse-session-token") )
.send()
.end(function(userData)
如果响应为 200 并且在回复正文中包含用户(使用 Parse.Object.fromJSON),则会话有效,因此我在添加一些内部身份验证标头后将请求转发到其他内部服务。
【讨论】:
以上是关于为用户和身份验证使用解析服务器并调用其他内部 REST Web 服务的主要内容,如果未能解决你的问题,请参考以下文章
Spring SecurityContext 在错误页面上返回空身份验证