Я просто экспериментировал с песочницей DBS API (https://www.dbs.com/developers/). Мы должны использовать OAuth2, чтобы получить токен доступа, прежде чем передавать его в заголовке для аутентификации вызовов API. Когда я протестировал все в их тестовом клиентском пользовательском интерфейсе, я получил результаты от вызова API.
Однако, когда я закодировал свое простое приложение узла, я мог успешно выполнить OAuth2 и получить токен доступа, но при передаче вместе с clientId получил ошибку сервера 500 от API.
Например, вызов GET для получения реквизитов банковского счета:
const options = {
method: 'GET',
uri: dbsHost + rootPath + '/accounts/22909292550739201999095',
headers: {
'Content-Type': 'application/json',
'accessToken': accessToken,
'clientId': clientId
}
}
request(options, (error, response, body) => {
// Server error 500
console.info(response)
})
Это были точные инструкции, которые даются в пользовательском интерфейсе тестового клиента. При ближайшем рассмотрении я понял, что токен доступа, который я всегда возвращал, содержит 488 символов, а в пользовательском интерфейсе тестового клиента - только 475. Есть ли причина для этой разницы? Как я узнаю, что OAuth2 был выполнен правильно и я получаю правильный токен доступа?
Вот как я сделал OAuth2:
На интерфейсе:
let authorizationUri = dbsHost + rootPath + '/oauth/authorize'
authorizationUri += '?client_id=' + clientId
authorizationUri += '&redirect_uri=' + redirectUri
authorizationUri += '&scope=Read'
authorizationUri += '&response_type=code'
authorizationUri += '&state=0399'
windows.location.assign(authorizationUri)
И на конечной точке redirect_uri, как только я верну код авторизации:
app.get('/authCallback', (req, res) => {
let authCode = req.query.code
// Encode client_id:client_secret in base-64 to pass in as Auth Basic Header
let b64 = new Buffer(clientId + ':' + clientSecret).toString('base64')
const options = {
method: 'POST',
url: dbsHost + rootPath + '/oauth/tokens',
headers: {
'Authorization': 'Basic ' + b64
},
form: {
'code': authCode,
'redirect_uri': redirectUri,
'grant_type': 'token',
'state': '0399'
}
}
request(options, (error, response, body) => {
if (error) {
console.error('Access Token Error', error.message)
return res.status(500).json('Authentication failed');
}
let json = JSON.parse(body)
let accessToken = json['access_token']
// Make a call with this access token
})
})





Надеюсь, проблема уже решена? У меня также возникают проблемы, когда я использую DBS API, я точно следую методу «TRY IT», чтобы получить свой токен доступа, но не могу использовать этот токен для вызова API. вы использовали их демонстрационный идентификатор и пароль (iw036 / 123456) для получения кода авторизации? Не уверен, что это можно использовать для получения «правильного» кода авторизации и токена доступа ... @leonardloo