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

轻量服务器_怎样优化企业网站_精选特惠

小七 141 0

本博客是一系列教程的一部分,介绍如何使用SAP云平台serverless Runtime中的functions-as-a-Service产品编写serverless函数

快速链接:快速指南示例代码

简介

在函数代码中,我们基本上可以做任何可能的事情节点.js听起来不错,但有时会有障碍比如(必要但乏味的)安全方面如果我们进行演示并从函数中调用REST服务端点:然后该端点将始终是开放的,以使演示小而好但是,通常情况下,REST端点是受保护的,用户需要使用用户/密码进行身份验证->这很简单,只要提供基本的身份验证其他端点需要apiKey->没问题,我们把它设为标题Prof端点受OAuth身份验证保护->在这里它变得更加复杂,但我在以前的博客中展示了它实际上,prof端点受OAuth保护,八斗大数据,需要授权->这有点棘手,除了OAuth流之外还需要一些配置

为什么棘手?只是给用户分配一个角色…?停止:函数不是用户,我们不能像分配给用户那样将所需角色分配给函数幸运的是,本教程展示了如何实现这一点:编写一个函数,调用受OAuth保护且需要作用域

的端点,换句话说,关于棘手的部分:如何在客户端凭证流中为函数分配作用域

记住OAuth 2.0:

为了访问资源(REST端点),我们需要一个JWT令牌。我们从"授权服务器"(XSUAA)获取令牌为了得到它,有几种"补助金类型":–"资源所有者密码凭据":人类用户使用密码(登录屏幕)进行身份验证,令牌包含基于其角色的作用域–"客户端凭据":从一个应用程序到另一个应用程序,无需登录(更多信息请参见此处)

在我们的场景中,函数在没有用户上下文的情况下运行因此,我们谈论的是"客户端凭据"流我们没有用户密码。我们无法通过打开登录屏幕获得用户密码

当然,我们知道如何从XSUAA服务实例获得JWT令牌但是该令牌不包含受保护的REST端点所需的作用域

那么需要做什么才能获得包含特定作用域的JWT令牌呢?技巧在于xsuaa实例的配置

注意:当然,可以从UI5应用程序调用函数,该应用程序以用户为中心,具有用户登录功能在这种情况下,函数将从UI5应用程序接收JWT令牌,爱返利,因此无需执行任何操作所以不需要教程本教程适用于非以用户为中心的场景,没有用户界面,没有用户,没有乐趣

前提条件

–访问SAP云平台,生产帐户。试用版(当前)不受支持–无服务器运行时实例(参见准备博客)–本地安装Cloud Foundry CLI(参见相同的准备博客)–本地可用的CLI功能(请参见相同链接)– 节点.js已安装–在SAP云平台无服务器运行时编写函数的基本知识

概述

在本教程的第一部分中,我们将创建一个非常基本的应用程序,它公开一个受OAuth保护的端点,并且需要一定的范围在第二部分中,我们将创建一个函数,尝试调用该端点

第1部分:受保护的应用程序创建xsuaa,定义范围创建应用程序,检查范围

第2部分:调用功能创建xsuaa,定义权限创建函数,执行OAuth流

准备:创建项目结构

在我们的示例中,我们使用一个根项目C:\tmp\u faas\u callsafe包含2个工作目录,对于安全应用程序C:\tmp\u faas\u callsafe\safeapp对于函数C:\tmp\u faas\u callsafe\unsafefunction因此,让我们创建文件夹结构:

美丽。

第1部分:受保护的应用程序

我们使用节点.js和express来创建一个提供REST端点的简单应用程序我们使用passport和@sap/xssec用oauth2.0保护它我们使用手动代码来强制执行所需的授权我们使用一个XSUAA服务实例来管理OAuth流

我们的应用程序的安全性是由一个XSUAA实例执行的我们用以下参数配置它

这个内容可以在cloud cockpit中创建实例时粘贴,但是为了更好的处理,我们将上面的内容存储在一个我们选择的文件名中。在我的示例中,为了避免混淆,文件有一个愚蠢的名称:xs security-安全.json

简要说明

xsappname安全工件的名称(在内部,它被视为应用程序)。由XSUAA和我们区分的安全工件

范围我们声明:我们要求任何调用我们端点的人都应该有特殊权限。为了区分"我们的"许可与其他许可,我们将"我们的"特殊许可命名为"我们的"这就是"范围"。注意:我们没有定义"角色"。这意味着没有人类用户能够调用我们的端点在我们的教程中,我们不需要它因此,让我们保持文件简短,并集中在关键的

"授权应用程序"这是基本路线:我们没有将"角色"分配给人类用户,而是将其分配给应用程序。因为这就是我们在本教程中要学习的:FaaS函数如何调用需要特殊"作用域"的受保护应用程序我们的应用程序受oauth保护,需要一个作用域。"grant"是外部应用程序(在我们的例子中是FaaS)获得调用受保护端点的权限/授权的机制注:我们必须明白,我们没有将作用域分配给已部署的节点.js应用程序(或其他)我们在这里明确写的是:安全工件的名称。安全工件的名称是属性xsappname的值为了避免混淆,返利手游平台,我总是给所有工件起愚蠢的名字,这样更容易区分。因此,如果名称以xsapp…开头,则它是安全工件的名称在本教程中,我们将创建xsuaa的第二个实例,并将其命名为xsappforfaas所以这就是我们在这里写的:我们"授予"名为xsappforfaas的安全工件新的作用域注:定义允许的应用程序的语法:"$XSAPPNAME(,)"注:在下面的部分中,将有一个注释,用于键入与此处完全相同的xsappname的值或者我们可以说:这里我们必须键入xsappname的值,就像我们在下面的部分中键入它一样无所谓:xsappname属性不允许输入错误,否则我们会得到错误