访问函数计算 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");
}
相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
29天前
|
运维 网络协议 安全
为什么经过IPSec隧道后HTTPS会访问不通?一次隧道环境下的实战分析
本文介绍了一个典型的 HTTPS 无法访问问题的排查过程。问题表现为 HTTP 正常而 HTTPS 无法打开,最终发现是由于 MTU 设置不当导致报文被丢弃。HTTPS 因禁止分片,对 MTU 更敏感。解决方案包括调整 MSS 或中间设备干预。
|
2月前
|
数据采集 Web App开发 iOS开发
解决Python爬虫访问HTTPS资源时Cookie超时问题
解决Python爬虫访问HTTPS资源时Cookie超时问题
|
11月前
|
消息中间件 缓存 监控
在FaaS中,如何设计无状态的函数来确保数据处理的一致性?
在FaaS中,如何设计无状态的函数来确保数据处理的一致性?
|
运维 负载均衡 Serverless
函数计算产品使用问题之在同一地域同一时刻最多可以同时运行多少个函数实例
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
安全 网络协议 网络安全
只有IP地址没有域名,如何实现HTTPS访问?
在仅有IP地址而无域名的情况下,实现HTTPS访问并非不可能。主要挑战包括证书颁发机构(CA)对IP地址的支持有限及浏览器兼容性问题。解决方案有:1) 搭建私有CA为内部IP地址颁发证书;2) 使用支持IP地址的公共CA服务。选择合适的方案需根据需求权衡。具体步骤包括选择证书类型、生成CSR文件、提交并完成验证、安装SSL证书和配置强制HTTPS访问。确保IP地址稳定,并定期维护安全性。 **申请优惠**:访问JoySSL官网并填写注册码“230907”可优惠申请IP地址证书。
903 5
|
9月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
2957 8
|
10月前
|
安全 网络协议 应用服务中间件
内网ip申请SSL证书实现https访问
内网IP地址虽不能直接申请公网SSL证书,但可通过IP SSL证书保障数据安全。流程包括:确定固定内网IP,选择支持内网IP的CA,注册申请证书,生成CSR,验证IP所有权,下载部署证书至Web服务器,测试HTTPS访问,确保配置正确及证书有效。此方法适用于内网环境,提升数据传输安全性。
内网ip申请SSL证书实现https访问
|
10月前
|
安全 网络安全 数据安全/隐私保护
政务内网实现https访问教程
政务内网实现HTTPS访问需经过多个步骤:了解HTTPS原理,选择并申请适合的SSL证书,配置SSL证书至服务器,设置端口映射与访问控制,测试验证HTTPS访问功能,注意证书安全性和兼容性,定期备份与恢复。这些措施确保了数据传输的安全性,提升了政务服务的效率与安全性。
|
10月前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
488 2
|
10月前
|
安全 网络安全 数据安全/隐私保护
内网IP地址实现HTTPS加密访问教程
在内网环境中,为确保数据传输的安全性,绑定SSL证书搭建HTTPS服务器至关重要。本文介绍了内网IP地址的前期准备、申请SSL证书的步骤以及客户端配置方法。具体包括选择合适的CA、注册账号、提交申请、下载证书,并在客户端导入根证书,确保通信数据的安全加密。推荐使用JoySSL提供的技术解决方案,确保内网设备通信安全。
内网IP地址实现HTTPS加密访问教程

热门文章

最新文章