Graphdb.js Node.js-使用GraphDB进行节点服务器身份验证

我知道GraphDB本身提供了几种身份验证方式。假设我锁定了对GraphDB服务器的访问,仅允许具有凭据的用户访问它。假设我使用用户名和密码创建了一个授权用户。 我正在使用Node.js,尤其是graphdb.js建立不安全的连接。但是,如何在来自节点服务器和graphdb服务器的通信之间添加身份验证?该文档说:

  

如果该库将再次用于安全服务器,则所有   必须通过发送http授权来验证API调用   带有令牌的标头,该标头是在调用之后   rest / login / user_name,其中包含作为特定标头提供的密码。在   如果服务器要求对请求进行身份验证,则   ServerClientConfig和RepositoryClientConfig中的   配置了要用于的用户名和密码   身份验证。如果提供了这些,则客户认为   身份验证是强制性的,使用提供的登录名   凭证是在第一个API调用之前以认证方式执行的。   成功登录后,将接收到的用户详细信息和身份验证   令牌存储在AuthenticationService中。从那一刻起,   每个API调用都会发送给授权标头,其中包含   令牌作为价值。如果令牌过期,则第一个API调用将是   由于状态为401的HTTP错误而被拒绝。客户端对此进行了处理   通过使用相同的凭据重新登录用户来自动更新   存储的令牌并重试API调用。这种行为是   默认值,如果ServerClientConfig或   RepositoryClientConfig配置为keepAlive = false。

那么需要遵循带有示例代码的编码步骤。我还没有看到这样做的例子。有人可以帮忙吗?

lszhangkun 回答:Graphdb.js Node.js-使用GraphDB进行节点服务器身份验证

除了@Konstantin Petrov所说的以外,我还提到了使用graphdbjs进行本地身份验证是一项仍在开发中的功能。您可以按照PR进行操作,还将添加示例。在此之前,可以通过发出登录请求并使用响应返回的授权令牌来解决此问题,以创建一个配置了授权标头和令牌的RDFRepositoryClient实例。下面是一个示例。

const {RepositoryClientConfig,RDFRepositoryClient} = require('graphdb').repository;
const {RDFMimeType} = require('graphdb').http;
const {SparqlJsonResultParser} = require('graphdb').parser;
const {GetQueryPayload,QueryType} = require('graphdb').query;
const axios = require('axios');

axios.post('http://localhost:7200/rest/login/admin',null,{
    headers: {
        'X-GraphDB-Password': 'root'
    }
}).then(function(token) {
    const readTimeout = 30000;
    const writeTimeout = 30000;
    const repositoryClientConfig = new RepositoryClientConfig(['http://localhost:7200/repositories/testrepo'],{
        'authorization': token.headers.authorization
    },'',readTimeout,writeTimeout);
    const repositoryClient = new RDFRepositoryClient(repositoryClientConfig);
    repositoryClient.registerParser(new SparqlJsonResultParser());

    const payload = new GetQueryPayload()
        .setQuery('select * where {?s ?p ?o}')
        .setQueryType(QueryType.SELECT)
        .setResponseType(RDFMimeType.SPARQL_RESULTS_JSON)
        .setLimit(100);
    return repositoryClient.query(payload);
})    
.then(function(stream) {
    // here is the query response stream
})
.catch(function(error) {
    console.log('error',error);
});
,

启用安全性后,您必须通过传递JWT令牌来授权请求​​。 要接收JWT令牌,您可以以管理员身份发送请求。为了简单起见,所有示例都使用curl,但是想法是相同的。

POST 'http://localhost:7200/rest/login/admin' -H 'X-GraphDB-Password: root' --compressed

返回的标头包含JWT令牌:

-H 'Authorization: GDB eyJ1c2VybmFtZSI6ImFkbWluIiwiYXV0aGVudGljYXRlZEF0IjoxNTQwODA1MTQ2MTE2fQ==.K0mo2dSa/Gw+AR995qTrsA1zJGwlfOVEaIokZnhINh0='

您可以在下一个请求中使用令牌:

curl 'http://localhost:7200/rest/monitor/query/count' -H 'Authorization: GDB eyJ1c2VybmFtZSI6ImFkbWluIiwiYXV0aGVudGljYXRlZEF0IjoxNTQwODA1MTQ2MTE2fQ==.K0mo2dSa/Gw+AR995qTrsA1zJGwlfOVEaIokZnhINh0=' -H 'X-GraphDB-Repository: news' --compressed
本文链接:https://www.f2er.com/3151702.html

大家都在问