Я пытаюсь вызвать веб-действие Cloud Functions, защищенное аннотацией -a require-whisk-auth my-secret
из браузера (JavaScript) через CORS.
Я создал веб-действие и защитил его
(см. https://console.bluemix.net/docs/openwhisk/openwhisk_webactions.html#securing-web-actions),, но при вызове действия с использованием JavaScript-извлечения будет возвращен 401 код неавторизованного статуса.
Мой код JavaScript:
var myHeader = new Headers();
myHeader.append('X-Require-Whisk-Auth', 'my-secret');
fetch('https://openwhisk.ng.bluemix.net/api/v1/web/{CLOUD FOUNDRY ORG}_{CLOUD FOUNDRY SPACE}/default/action.json',{
headers: myHeader,
}).then(function(response) {
var res = response.text();
res.then(function(res) {
var json = JSON.parse(res);
var token = json.token;
console.log(token);
}).catch(function(error) {
console.log(error);
});
}).catch(function(error) {
console.log(error);
});
Ошибка консоли (Chrome):
OPTIONS https://openwhisk.ng.bluemix.net/api/v1/web/{CLOUD FOUNDRY ORG}_{CLOUD FOUNDRY SPACE}/default/action.json 401 (Unauthorized)
Access to fetch at 'https://openwhisk.ng.bluemix.net/api/v1/web/{CLOUD FOUNDRY ORG}_{CLOUD FOUNDRY SPACE}/default/action.json' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Я также попытался добавить аннотацию web-custom-options
- ibmcloud fn action update /{CLOUD FOUNDRY ORG}_{CLOUD FOUNDRY SPACE}/action --web true -a require-whisk-auth my-secret -a web-custom-options true
- для создания пользовательского ответа на запросы OPTIONS, но он не работает.
Это мое действие (action.js):
function main(params) {
if (params.__ow_method == "options") {
return {
headers: {
'Access-Control-Allow-Methods': 'OPTIONS, GET',
'Access-Control-Allow-Origin': 'http://127.0.0.1:8080',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Headers': 'X-Require-Whisk-Auth, Content-Type, authorization'
},
statusCode: 200
}
}else{
return {
headers: {
'Access-Control-Allow-Methods': 'OPTIONS, GET',
'Access-Control-Allow-Origin': 'http://127.0.0.1:8080',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Headers': 'X-Require-Whisk-Auth, Content-Type, authorization',
'Content-Type': 'application/json'
},
body: {'token': token},
statusCode: 200
}
}
}
Как вызывать защищенные веб-действия через CORS с настраиваемым заголовком «X-Require-Whisk-Auth»? (Я должен прикрепить заголовок «X-Require-Whisk-Auth», когда включена аннотация require-whisk-auth.)