访问函数计算 FC 非匿名 HTTP 函数

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 访问函数计算 FC 非匿名 HTTP 函数

签名认证相关文档
Java 访问非匿名 HTTP 函数示例
Python 访问非匿名 HTTP 函数示例
NodeJS 访问非匿名 HTTP 函数示例
PHP 访问非匿名 HTTP 函数示例

"use strict";

const https = require("https");
const crypto = require("crypto");

const AK = "YOUR_AK";
const SK = "YOUR_SK";
const HOST_NAME = "xxxxx.cn-beijing.fcapp.run";
const PATH = "/list";
const METHOD = "GET";

exports.handler = async (event, context, callback) => {
   
  const date = new Date().toUTCString();
  const headers = {
   
    "content-type": "application/json",
    //"x-fc-security-token": "FOR_STS_SECURITY_TOKEN",
    date: date,
    host: HOST_NAME,
  };
  const signature = signString(
    composeStringToSign(METHOD, PATH, headers, {
    a: "b" }),
    SK
  );
  const options = {
   
    hostname: HOST_NAME,
    port: 443,
    path: PATH + "?a=b",
    method: METHOD,
    headers: {
   
      ...headers,
      Authorization: `FC ${
     AK}:${
     signature}`,
    },
  };

  const req = https.request(options, (res) => {
   
    console.log(`statusCode: ${
     res.statusCode}`);
    res.on("data", (d) => {
   
      console.log(d.toString());
      callback(null, res.statusCode);
    });
  });

  req.on("error", (error) => {
   
    console.error(error);
  });

  req.end();
};

function buildCanonicalHeaders(headers, prefix) {
   
  var list = [];
  var keys = Object.keys(headers);

  var fcHeaders = {
   };
  for (let i = 0; i < keys.length; i++) {
   
    let key = keys[i];

    var lowerKey = key.toLowerCase().trim();
    if (lowerKey.startsWith(prefix)) {
   
      list.push(lowerKey);
      fcHeaders[lowerKey] = headers[key];
    }
  }
  list.sort();

  var canonical = "";
  for (let i = 0; i < list.length; i++) {
   
    const key = list[i];
    canonical += `${
     key}:${
     fcHeaders[key]}\n`;
  }

  return canonical;
}

function composeStringToSign(method, path, headers, queries) {
   
  const contentMD5 = headers["content-md5"] || "";
  const contentType = headers["content-type"] || "";
  const date = headers["date"];
  const signHeaders = buildCanonicalHeaders(headers, "x-fc-");

  var str = `${
     method}\n${
     contentMD5}\n${
     contentType}\n${
     date}\n${
     signHeaders}${
     path}`;

  if (queries) {
   
    var params = [];
    Object.keys(queries).forEach(function (key) {
   
      var values = queries[key];
      var type = typeof values;
      if (type === "string") {
   
        params.push(`${
     key}=${
     values}`);
        return;
      }
      if (Array.isArray(values)) {
   
        queries[key].forEach(function (value) {
   
          params.push(`${
     key}=${
     value}`);
        });
      }
    });
    params.sort();
    str += "\n" + params.join("\n");
  }
  return str;
}

function signString(source, secret) {
   
  const buff = crypto
    .createHmac("sha256", secret)
    .update(source, "utf8")
    .digest();
  return Buffer.from(buff, "binary").toString("base64");
}
相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
12天前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
202 7
|
5月前
|
NoSQL 关系型数据库 Serverless
函数计算产品使用问题之通过http调用时,如何定义结构体传参
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
函数计算产品使用问题之通过http调用时,如何定义结构体传参
|
5月前
|
机器学习/深度学习 Ubuntu Linux
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
|
5月前
|
运维 Serverless 调度
函数计算产品使用问题之怎么在HTTP触发的函数里添加或读取自定义头部
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
缓存 运维 Serverless
函数计算产品使用问题之如何创建HTTP触发器
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
缓存 运维 Serverless
函数计算产品使用问题之怎么优化HTTP Server的启动速度
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
消息中间件 Kafka 网络安全
【Azure 应用服务】本地创建Azure Function Kafka Trigger 函数和Kafka output的HTTP Trigger函数实验
【Azure 应用服务】本地创建Azure Function Kafka Trigger 函数和Kafka output的HTTP Trigger函数实验
|
8月前
|
弹性计算 应用服务中间件 Apache
ECS配置问题之输入ip无法访问如何解决?
ECS配置指的是对阿里云Elastic Compute Service(弹性计算服务)实例的硬件和软件资源进行设置的过程;本合集将详述如何选择合适的ECS配置、调整资源配比以及优化实例性能,以满足不同应用场景的需求。
|
Java 应用服务中间件 网络安全
Tomcat配置ssl协议及遇到的问题https页面无法访问
Tomcat配置ssl协议及遇到的问题https页面无法访问
|
2月前
|
安全 网络协议 网络安全
怎么给ip地址配置https访问
为了配置公网IP地址的HTTPS访问,首先需明确需求并选择受信任的证书颁发机构(如JoySSL)。接着,在JoySSL官网注册并登录,填写特定注册码230922以获取免费IP证书的测试权限。提交证书申请时,填写IP地址及相关验证信息,并完成IP地址验证。验证通过后,下载证书文件。最后,使用浏览器访问IP地址,检查安全连接标志,确保无证书错误。通过以上步骤,可成功配置IP地址的HTTPS访问,提升数据传输安全性和可信度。