HANA上的NodeJS:使用JWT进行身份验证

2020-09-09 09:32发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我尝试使用NodeJS编写API。 我使用了SAP的几个演示之一。 为了从HANA-DB获得结果,每个请求都必须使用JSON Web令牌进行身份验证。 为此,我们使用Passport-Lib并将其与xssec-Strategy链接,Passport需要此xssec-Strategy来验证用户身份。 我不会让它工作。 在每次请求时,我都会得到 401未经授权,并且我不知道自己在做什么错。 我需要通过JWT进行授权,因为通过。 get("/img/route",function(req,res){var client = req.db; var hdbcon = new hdbext.getConnection(client); ...}) ; 。我能够轻松触发DB-Call。

这是我的代码:

"严格使用";

var port = process.env.PORT || 3000,

express = require(" express"),

app = express(),

xssec = require(" sap-xssec"),

xsjs = require(" sap-xsjs"),

xsenv = require(" sap-xsenv"),

护照= require(" passport"),

xsHDBConn = require(" sap-hdbext")

;

//

//JSON Web令牌

//身份验证模块配置

//

app.use(passport.initialize());

passport.use(新的xssec.JWTStrategy(xsenv.getServices({

uaa:{

标记:" xsuaa"

}

})。uaa));

//用于每个请求此身份验证模式

app.use(

passport.authenticate(" JWT",{

会话:false

}),

xsHDBConn.middleware()

);

//

//配置HANA

//用于XSJS(具有重定向功能)

//

var选项= xsjs.extend({

匿名:true//,//删除以对呼叫进行身份验证

//redirectUrl:"/img/index.xsjs"

});

选项= xsjs.extend(选项,xsenv.getServices({

哈娜:{

标记:" hana"

}

}));

//xsjs(options).listen(port); //仅XSJS需要

app.listen(端口);

console.log("服务器正在监听端口%d",端口);

app.all("/",function(req,res){

res.json({状态:200,消息:"确定",数据:"有效!"});

});

/**

*用户管理

*/

var userAPI = require(" ./api/user");

app.use("/img/user",userAPI);

/**

*未知路线

*/

app.all(" *",function(req,res){

res.json({状态:404,消息:"未知目标"。});

});




谢谢您的帮助!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我尝试使用NodeJS编写API。 我使用了SAP的几个演示之一。 为了从HANA-DB获得结果,每个请求都必须使用JSON Web令牌进行身份验证。 为此,我们使用Passport-Lib并将其与xssec-Strategy链接,Passport需要此xssec-Strategy来验证用户身份。 我不会让它工作。 在每次请求时,我都会得到 401未经授权,并且我不知道自己在做什么错。 我需要通过JWT进行授权,因为通过。 get("/img/route",function(req,res){var client = req.db; var hdbcon = new hdbext.getConnection(client); ...}) ; 。我能够轻松触发DB-Call。

这是我的代码:

"严格使用";

var port = process.env.PORT || 3000,

express = require(" express"),

app = express(),

xssec = require(" sap-xssec"),

xsjs = require(" sap-xsjs"),

xsenv = require(" sap-xsenv"),

护照= require(" passport"),

xsHDBConn = require(" sap-hdbext")

;

//

//JSON Web令牌

//身份验证模块配置

//

app.use(passport.initialize());

passport.use(新的xssec.JWTStrategy(xsenv.getServices({

uaa:{

标记:" xsuaa"

}

})。uaa));

//用于每个请求此身份验证模式

app.use(

passport.authenticate(" JWT",{

会话:false

}),

xsHDBConn.middleware()

);

//

//配置HANA

//用于XSJS(具有重定向功能)

//

var选项= xsjs.extend({

匿名:true//,//删除以对呼叫进行身份验证

//redirectUrl:"/img/index.xsjs"

});

选项= xsjs.extend(选项,xsenv.getServices({

哈娜:{

标记:" hana"

}

}));

//xsjs(options).listen(port); //仅XSJS需要

app.listen(端口);

console.log("服务器正在监听端口%d",端口);

app.all("/",function(req,res){

res.json({状态:200,消息:"确定",数据:"有效!"});

});

/**

*用户管理

*/

var userAPI = require(" ./api/user");

app.use("/img/user",userAPI);

/**

*未知路线

*/

app.all(" *",function(req,res){

res.json({状态:404,消息:"未知目标"。});

});




谢谢您的帮助!

付费偷看设置
发送
2条回答
小灯塔
1楼 · 2020-09-09 10:01.采纳回答

>在每个请求上,我都会得到401未经授权,并且我不知道自己在做什么错。

您是否已重定向到UAA登录? 您是否将Web模块作为路由放置在node.js模块的前面? 如果直接访问node.js模块,则获得401未经授权是完全正常的。

jovirus
2楼-- · 2020-09-09 10:13

嗨,汤玛斯·荣格

如果在server.js中未对护照进行身份验证(在下面的代码中有注释),并且一旦启用以下代码,我们的节点服务就可以正常工作,我们会在服务URL上获得未授权的错误,这是可以预期的。 但是,当我们使用应用程序路由器URL(而不是Web应用程序URL)时,我们可以通过调用/node route访问CDS odata,但是我们无法访问在node express路由器中定义的任何其他路由,我们缺少了什么 ? 浏览器中出现503服务暂时性不可用错误。 我正在关注Hana 2.0 SP03教程文档,您有与Hana 2.0 SP04类似的文档吗?

您可以从下面的仓库中找到我的代码。

GitHub存储库链接

谢谢

Sasi

 passport.authenticate(" JWT",{
         会话:错误
     })

一周热门 更多>