云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

企业邮箱_千金百度云_免费6个月

小七 141 0

无人机部署和Cloudflare工作人员

无人机部署图几个月前,当我们推出Workers时,大部分的关注点都集中在运行在需要额外吸引力的origins网站周围的用例上。有了Workers,您可以轻松地创建一个站点,引入大量的个性化功能,a/B测试更改,甚至可以围绕一系列服务聚合一组API响应。简言之,通过在Cloudflare员工中分层,我们可以利用原始网站并进行转型。平台的乐趣之一就是你永远不知道下一个用例会在哪里出现。进入无人机部署DroneDeploy是一个云平台,可以方便地收集和分析无人机图像和数据。只需在移动设备上安装DroneDeploy并连接到DJI无人机。DroneDeploy驾驶无人机,收集图像,然后将照片拼接成地图。这些地图可以显示作物状况和压力、建设项目进展情况,甚至可以显示大型太阳能农场的温度范围,或者搜索和救援情况。通过将植物健康算法应用到无人机生成的地图上,种植者可以精确定位他们田地中的作物压力,并消除病虫害、疾病或灌溉问题。有了热实时地图,就可以在几分钟内从空中视察太阳能发电场,以检测出太阳能电池板中需要修理的破损光电管。然后你可以上传图片到云端,制作高分辨率地图和三维模型。使用这些工具,您可以执行更深入的分析(例如体积、距离、植物健康状况等),与同事共享和协作,或者将地图和模型移动到CAD或农业管理平台等应用程序中。看看我们是如何在Cloudflare总部上空画出飞行路线的。这架无人机在大楼周围飞行,捕捉到了图像,我们将这些图像转换成地图和三维模型。那么无人机部署如何使用工人?为什么无人机部署很重要?重要的是要理解,他们希望围绕他们用来制作服务的许多服务保持体系结构自由。与今天的许多软件栈一样,它们使用GCP、AWS和其他工具,但它们希望在其网络路由和身份验证层中保持灵活性。通过在现场为无人机用户提供显著更好的体验,他们既可以将认证推到CDN前面,也可以直接从我们的CDN提供收集的图像(通常用于渲染地图或3D模型的成百上千个瓷砖)。DroneDeploy的许多用户在工作场所或现场的高度可变的网络条件下工作。Workers允许他们将身份验证推到边缘;并使用Workers构建一个自定义签名URL,以确保将正确的图像呈现给正确的消费者—实际上确保他们的多租户图像存储模型在边缘得到安全保护。为此,DroneDeploy使用一种URL身份验证方法(通常称为请求签名),该方法使用Web加密API。DroneDeploy工程副总裁埃里克•豪瑟(Eric Hauser)在评论这一点时,为他的团队详细介绍了Cloudflare员工的优势:当我们遇到主要基础设施提供商CDN的共享功能受到限制时,Cloudflare Workers为我们提供了灵活性。围绕身份验证、数据安全和本地性的独特企业需求要求我们在路由层具有灵活性。从迄今为止我们在身份验证方面所做的工作来看,我们看到了与Cloudflare之间令人兴奋和富有成效的关系。让我们来了解一下他们是如何使用工人的。DroneDeploy使用标准JWT身份验证-如果您不确定什么是JWT令牌,请在这里阅读更多内容。因此,一般流程要求工人:拦截来自无人机部署移动应用程序或网站的图像请求。这些请求可以是成百上千的图像块,所有这些都是渲染典型地图或三维模型所需的,并且存储在S3或Google云存储中。确保存在正确的JSON Web令牌(JWT)。假设令牌有效,HMAC对URL进行签名,设置缓存头,并返回适当的文件。让我们看一下每一步-注意,出于安全原因,我们过滤了代码的一些组件。addEventListener('fetch',事件=>{事件响应(手绘(事件请求))});/***拦截请求*验证提供的JWT凭据*如果有效:*将请求重写到存储后端*用我们的后端凭据签署请求*从存储后端返回响应*如果无效:*返回403禁止响应*/函数handleFetch(请求){如果(!(等待isValidJwt(请求))){return new Response('Invalid JWT',{status:403})}const gsBaseUrl=createGoogleStorageUrl(请求);const gsHeaders=new Headers();gsHeaders.set('Date',new Date().toutString());//对于HMAC签名的URL,Google是必需的const signature=等待hmacSignature(gsBaseUrl,gsHeaders);gsHeaders.set("授权"、"AWS"+HMAC U密钥+":"+签名);returnfetch(新请求(gsBaseUrl,{headers:gsHeaders}))}现在检查一下JWT代币/***解析JWT并验证它。**我们只是在检查签名是否有效,但你可以做得更多。*例如,检查有效负载是否具有预期的条目,或者签名是否过期。。*/异步函数isValidJwt(请求){const encodedToken=getJwt(请求);if(encodedToken===空){返回false}const token=decodeJwt(encodedToken);返回isValidJwtSignature(token)}/***在本例中,JWT作为授权头的一部分传入,*在不记名计划之后。*从头解析JWT并返回它。*/函数getJwt(请求){const authHeader=请求.headers.get("授权");如果(!authHeader | |authHeader.substring(0,6)!=='持有人'){返回空}返回authHeader.substring(6) .修剪()}现在解码JWT令牌/***解析并解码JWT。*JWT是三个base64编码的字符串,与"."连接:*头、有效载荷和签名。*签名是"URL safe",因为"/+"字符已替换为"-"**步骤:*1。在"."字符处拆分令牌*2。Base64解码各个部分*3。保留原始的Bas64编码字符串以验证签名*/函数decodeJwt(token){常量部分=令牌.拆分('.');常量标题=JSON.parse(atob(部件[0]);常量有效载荷=JSON.parse(atob(第[1]部分);const signature=atob(parts[2].replace(//g,'/').replace(/-/g,'+');返回{页眉:页眉,有效载荷:有效载荷,签名:签名,原始:{header:parts[0],负载:parts[1],签名:parts[2]}}}/***验证JWT。**步骤:*从Base64编码的字符串重建签名消息。*将RSA公钥加载到加密库中。*用消息和密钥验证签名。*/异步函数isValidJwtSignature(令牌){const encoder=新的TextEncoder();常数数据=编码器.编码([令牌.raw.header, 令牌.raw.payload].join('.');const signature=新建Uint8Array(数组.from(令牌.签名).map(c=>c.charCodeAt(0));施工图={alg:'RS256',e: ‘AQAB’,外景:是的,密钥操作:['verify'],kty:'RSA',n: RSA_公钥};const key=等待crypto.Minicle.importKey('jwk',jwk,{name:'RSASSA-PKCS1-v1_5',hash:'SHA-256'},false,['verify']);返回crypto.Minicle.verify('RSASSA-PKCS1-v1_5',密钥、签名、数据)}现在HMAC对URL进行签名,并返回文件。/***将原始请求的URL重写为Google存储API和bucket。*/函数createGoogleStorageUrl(请求){const googlePrefix='https://storage.googleapis.com/BUCKET_名称';const path=新URL(请求.url).路径名;返回新的URL(googlePrefix+path)}/***为Google存储URL创建HMAC签名。*/异步函数hmacSignature(url,headers){const encoder=新文本编码器()const message=createMessage(url,标题)const key=等待crypto.Minicle.importKey("生的",编码器.编码(HMAC_SECRET),{name:'HMAC',hash:'SHA-1'},false,['sign'])const mac=等待加密微妙符号("HMAC",钥匙,编码器.编码(消息)返回btoa(String.fromCharCode(…新的Uint8Array(mac)))}/***Google要求签名的消息具有特定的格式。*更多文档可在此处找到:* https://cloud.google.com/storage/docs/migrating*/函数createMessage(url,headers){const动词='GET'返回[动词,",//GET请求没有Content-MD5或Content-Type头,因此使用空字符串‘’,标题.get("日期"),url.路径名].join('\n')}因此,好处是显而易见的——边缘认证提供了灵活性和规模,但也意味着无人机部署不会被锁定在一个体系结构中,这种体系结构会阻止他们从GCP、AWS等选择最佳能力。从这里到哪里去?这名工人是几个无人驾驶飞机正在探索的第一个。在下一代员工中,DroneDeploy希望提供一系列改进,所有这些改进都是为了通过使用Cloudflare的缓存以及Cloudflare必须提供的其他功能来优化客户体验。到时候我们会更新博客的。如果您希望与其他Cloudflare用户共享工作人员,或者想查看其他Cloudflare用户的工作人员,请访问Cloudflare社区论坛的workers部分中的"配方交换"。