Вчера я работал над новым навыком Alexa (я действительно хочу, чтобы в этом месяце Amazon раздавала швабру за выпуск навыка), и я дошел до того, что мне нужно было заблокировать сервис. Впервые я рассказал об этом еще в марте (Создание Alexa Skills с помощью OpenWhisk — часть вторая). По сути, Amazon требует, чтобы вы защитили свой сервис Alexa и выполнили различные проверки, чтобы убедиться, что запрос действительно исходит от Alexa.
К счастью, для него есть простой пакет npm (alexa-verifier), и использовать его с OpenWhisk довольно просто. Как только вы добавите код, который я продемонстрировал в сообщении в блоге, вы просто убедитесь, что включили сырую поддержку API. Таким образом, вместо --web true
вы должны использовать --web raw
.
Но когда я готовился сделать это с навыком, который хотел высвободить, я подумал — почему бы не посмотреть, можно ли просто применить эту логику в его собственном действии? Тогда разработчику просто нужно будет использовать его как часть последовательности. Имея это в виду, я быстро написал следующее.
let alexaVerifier = require('alexa-verifier');
function main(args) {
return new Promise(function(resolve, reject) {
let signaturechainurl = args.__ow_headers.signaturecertchainurl;
let signature = args.__ow_headers.signature;
let body = new Buffer(args.__ow_body,'base64').toString('ascii');
let request = JSON.parse(body).request;
alexaVerifier(signaturechainurl, signature, body, function(err) {
if(err) reject(err);
resolve(JSON.parse(body));
});
});
}
exports.main = main;
Это действие принимает запрос, извлекает соответствующую информацию HTTP-запроса, а затем выполняет проверочный вызов.
Когда это сделано, он просто разрешает исходный запрос. Это означает, что ваш исходный код, навыки, над которыми вы работали, тестировали и т. д., могут оставаться точно такими же, и в моей книге это чертовски круто.
Итак, как вы его используете?
Во-первых, вы должны сделать новое действие, последовательность, которая объединит мое действие с вашим. Представьте, что действие вашего навыка называется nameCats. Вы можете создать новое проверенное действие следующим образом:
wsk action create --sequence alexa_namecats /[email protected]_My Space/alexa/verifier,nameCats --web raw
Конечным результатом является экшен под названием alexa_namecats, название не самое лучшее, но оно работает. Тогда вам нужен URL:
wsk action get alexa_namecats --url
Возьмите этот URL-адрес, добавьте «.json» в конец и обновите URL-адрес вашего навыка Alexa:
Если вы не хотите использовать мой общий пакет, вы можете сами взять код здесь: https://github.com/cfjedimaster/Serverless-Examples/tree/master/alexa. По мере того, как я буду думать о других вещах, которые имеют смысл, я добавлю их в свой пакет Alexa. (Или, если у вас есть идеи, с удовольствием пришлите мне запрос на включение!)
Первоначально опубликовано на сайте www.raymondcamden.com 18 августа 2017 года.