为用户和身份验证使用解析服务器并调用其他内部 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 在错误页面上返回空身份验证

如何验证和授权每个 WCF 调用?

Relay 和 GraphQL 中的身份验证

如何在apache camel DSL或camel Processor内部设置其他身份验证属性?

如何识别上下文是来自身份验证挂钩(某些挂钩)还是其他挂钩?

具有服务网关调用的 SSO 身份验证 Angular 应用程序