我知道GraphDB本身提供了几种身份验证方式。假设我锁定了对GraphDB服务器的访问,仅允许具有凭据的用户访问它。假设我使用用户名和密码创建了一个授权用户。
我正在使用Node.js,尤其是graphdb.js建立不安全的连接。但是,如何在来自节点服务器和graphdb服务器的通信之间添加身份验证?该文件说:
如果要针对安全服务器使用该库,则必须通过发送带有令牌的http授权标头来验证所有API调用,该标头是在调用rest / login / user_name并使用特定标头提供的密码后获得的。如果服务器要求对请求进行身份验证,则必须在ServerClientConfig和RepositoryClientConfig中配置用于身份验证的用户名和密码。如果提供了这些,则客户端将假定身份验证是强制性的,并且在第一次API调用之前将自动执行使用提供的凭据进行的登录。成功登录后,收到的用户详细信息和auth令牌将存储在AuthenticationService中。从那一刻起,每个API调用都会发送带有令牌作为值的授权标头。如果令牌到期,则第一个API调用将被拒绝,并显示状态为401的http错误。客户端通过使用相同的凭据重新登录用户,更新存储的令牌并重试API调用来自动处理此问题。此行为是默认行为,如果将ServerClientConfig或RepositoryClientConfig配置为keepAlive = false,则可以更改此行为。
那么需要遵循哪些带有示例代码的编码步骤。我还没有看到这样做的例子。有人可以帮忙吗?
除了@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);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句