#node.js #docusignapi #mean
#node.js #docusignapi #означает
Вопрос:
Создание базового приложения, в котором пользователи могут находить поставщиков услуг с помощью MEAN Stack, а после завершения переговоров соглашения генерируются автоматически и должны быть подписаны обеими сторонами. Застрял при генерации токена JWT для аутентификации. Шаги, которые я выполнил, следующие:
- Сгенерируйте URL-адрес для получения согласия от пользователя и передайте его интерфейсу. Пользователи будут перенаправлены, и оттуда могут быть предоставлены разрешения.
var url = "https://account-d.docusign.com/oauth/auth?response_type=codeamp;scope=signatureamp;client_id=42017946-xxxx-xxxx-xxxx-81b0ca97dc9aamp;redirect_uri=http://localhost:4200/authorization_code/callback";
res.status(200).json({
status: 1,
message: 'Fetched',
value: url
});
-
После успешного перенаправления с кодом в URL-адресе выполняется вызов API для серверной части для генерации токена JWT.
-
Токен генерируется следующим образом:
var jwt = require('jsonwebtoken');
var privateKey = fs.readFileSync(require('path').resolve(__dirname, '../../src/environments/docusign'));
const header = {
"alg": "RS256",
"typ": "JWT"
};
const payload = {
iss: '42017946-xxxx-xxxx-a5cd-xxxxxx',
sub: '123456',
iat: Math.floor( new Date() / 1000),
aud: "account-d.docusign.com",
scope: "signature"
};
var token = jwt.sign(payload, privateKey, { algorithm: 'RS256', header: header });
Закрытый ключ, используемый выше, взят из панели администратора docusign.
iss
-> Ключ интеграции с моим приложением.
sub
-> идентификатор пользователя в выпадающем списке символа пользователя в панели администратора
- Получить токен доступа
const axios = require('axios');
axios.post('https://account-d.docusign.com/oauth/token',
{
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
assertion: token
})
.then(resposne => {
console.log(response);
})
.catch(err => {
if (err.response) {
console.log(err);
} else if (err.request) {}
else {}
})
Но я постоянно получаю ошибку: { error: 'invalid_grant', error_description: 'no_valid_keys_or_signatures' }
Ответ №1:
Я бы предложил использовать узел.Пакет JS SDK или npm и использование метода build-it JWT для аутентификации. Код будет выглядеть следующим образом: (нажмите здесь, чтобы посмотреть пример GitHub)
DsJwtAuth.prototype.getToken = async function _getToken() {
// Data used
// dsConfig.dsClientId
// dsConfig.impersonatedUserGuid
// dsConfig.privateKey
// dsConfig.dsOauthServer
const jwtLifeSec = 10 * 60, // requested lifetime for the JWT is 10 min
scopes = "signature", // impersonation scope is implied due to use of JWT grant
dsApi = new docusign.ApiClient();
dsApi.setOAuthBasePath(dsConfig.dsOauthServer.replace('https://', '')); // it should be domain only.
const results = await dsApi.requestJWTUserToken(dsConfig.dsClientId,
dsConfig.impersonatedUserGuid, scopes, rsaKey,
jwtLifeSec);
const expiresAt = moment().add(results.body.expires_in, 's').subtract(tokenReplaceMin, 'm');
this.accessToken = results.body.access_token;
this._tokenExpiration = expiresAt;
return {
accessToken: results.body.access_token,
tokenExpirationTimestamp: expiresAt
};