在有关在Neo环境中在SAP Cloud Platform上开发应用程序的系列文章的第二篇文章中,我们将介绍最重要的方面之一-授权和用户身份验证管理。
在本文中,我们将展示如何在SAP Cloud Platform和虚构的ABC PetroCorp客户端的身份提供者(IDP)之间建立连接,以及如何向IDP添加用户。 接下来,我们将研究如何在特定应用程序(从IDP)中为客户公司的用户分配角色,以及如何配置SAML属性以将其从IDP传输到云平台SCP的应用程序。
在
第一篇虚构的ABC PetroCorp客户的子帐户中,已经安装了ITeLO Consulting提供的SCP污染监控应用程序的订阅。 现在,ABC PetroCorp员工需要将该应用程序提供给其他同事。
SAP Cloud Platform用户可以将其公司IDP连接到云平台,并为其加载到SCP中的应用程序配置安全性和身份验证管理。
ABC PetroCorp已激活SAP Cloud Platform Identity Authentication服务,该服务提供对业务流程,应用程序和数据的访问。 该服务提供了一个SCI租户,其中包含应用程序配置和用户授权管理。
艾米莉(Emily)是第一篇文章中的虚构英雄,可以访问此SCI租户-她是他的管理员,可以在特定应用程序中配置用户授权。 她想弄清楚如何使用身份验证服务创建这些配置。
要求:
- 连接了身份验证服务的生产性全球SCP帐户(非试用版)(作为ABC PetroCorp子帐户的IDP);
- 客户子帐户的用户必须是SCI租户的管理员,因此他将有权访问身份验证服务的管理控制台。
Emily需要在身份验证服务的管理控制台和SCP控制面板中完成以下步骤,以使云平台中的应用程序可用于其他ABC PetroCorp员工:
步骤1:在SCI租户和SCP子帐户之间建立信任关系。
步骤2:将用户导入SCI租户并更新(添加)必要的属性。
步骤3:为SCP中的应用程序级用户分配角色。
步骤4:在SCI租户和SCP控制面板中配置属性,以将其传输到应用程序。
步骤5:验证设置。步骤1:在SCI租户与SCP子帐户之间建立信任
Emily是ABC PetroCorp子帐户和SCI租户的管理员,这使她可以应用必要的设置,以将SCI租户用作ITeLO咨询提供商提供的多租户应用程序的“用户存储库”。
首先,Emily需要在SCI租户与ABC PetroCorp客户的SCP子帐户之间建立信任关系。
我们将使用链接“ https://.accounts.ondemand.com/admin”转到身份验证服务的管理控制台,其中是SCI租户的标识符。 该链接可以在身份验证服务的租户管理员收到的注册信中找到。 租户标识符也显示在此处。
身份验证服务管理控制台如下:

在另一个浏览器选项卡中,打开客户端子帐户“ ABC PetroCorp”的控制面板,然后转到选项卡“安全”->“信任”。

在打开的“信任管理”菜单中,转到“本地服务提供商”选项卡,然后单击“编辑”。

然后我们执行以下步骤:
- 在“配置类型”字段中,将类型更改为“自定义”;
- 单击“生成密钥对”为该帐户创建密钥和证书;
- 将“主要传播”字段中的值更改为“启用”;
- 点击“保存”。

单击“获取元数据”以“ xml”格式下载元数据文件,其中包含前面描述的配置。 它将用于与SCI租户建立信任。
让我们返回到身份验证服务的管理控制台,然后转到左侧菜单中的“应用程序和资源”->“应用程序”选项卡。 在“应用程序”区域中,单击“添加”按钮以指示在“ ABC PetroCorp”子帐户中部署的新应用程序。

在出现的窗口中,输入应用程序的名称(例如ABC_PetroCorp_IDP),然后单击“保存”。 之后,将在租户中为我们的应用程序创建一个新点。
在创建的应用程序中,转到“信任”选项卡,然后选择“ SAML 2.0配置”参数。

在“从元数据中定义”部分中,单击“浏览”,然后选择“ xml”格式的元数据文件,该文件是我们之前在SCP子帐户中建立信任关系时下载的。 下载文件后,将自动填写有关SAML 2.0配置的详细信息。 单击“保存”-现在已为该应用程序创建并保存了SAML 2.0配置。

返回到租户中名为ABC_PetroCorp_IDP的应用程序点,单击“家庭URL”,然后输入一个URL,例如“ https:// Pollutionmonitoringui- <subaccount_name> .dispatcher。<region_host>”。
可以在订阅了客户端的HTML5应用程序的描述中找到此URL(子帐户“ ABC PetroCorp”)。 为此,请转到“应用程序”->“订阅”标签中的客户子帐户,然后选择已签名的HTML5应用程序。

在“概述”选项卡中将是我们需要的URL。

然后,我们返回SCI租户中的应用程序点,在“主页URL”中指定应用程序URL,然后单击“保存”。

现在,转到身份验证服务管理控制台中的“应用程序和资源”选项卡->“租户设置”。 在“租户设置”页面上,选择“ SAML 2.0配置”。

在打开的窗口中,单击“下载元数据文件”以下载包含SCI租户配置的“ xml”文件。 将来将用于与客户在SCP中的子帐户建立信任。
返回子帐户“ ABC PetroCorp”,然后转到菜单“安全性”->“信任”,在打开的窗口中,选择“应用程序身份提供程序”选项卡。 单击“添加可信身份提供者”以添加有关SCI租户的详细信息。

在“常规”选项卡中,单击“浏览”,然后选择从身份验证服务的管理控制台下载的“ xml”格式的元数据文件。 下载文件后,配置详细信息将自动填写。 取消选中“仅适用于IDP启动的SSO”框,然后单击“保存”。

现在,ABC PetroCorp客户的子帐户与其SCI租户之间的信任关系已成功建立。 可以将相同的设置应用于其他客户端的子帐户(例如,对于XYZ EnergyCorp客户端)。
步骤2:将用户导入SCI租户并更新(添加)必要的属性
Emily需要确保应用程序用户已在ABC PetroCorp的公司IDP中注册。
理想情况下,公司IDP(在我们的情况下为SCI租户)应该已经包括公司中所有用户的列表。 为了清楚起见,我们将一些用户导入SCI租户,然后他们将获得访问该应用程序的适当权限。
该应用程序的演示存储在github-
Github上的“ csv”文件中。
从GitHub下载“ ABC PetroCorp”的“ CSV”文件。 “ csv”文件中指示了两个用户:
- ABCPlantSupervisor:该用户将是特定ABC PetroCorp工厂的经理,并且只能查看有关其工厂的数据;
- ABCAreaManager:该用户将是整个区域的经理,其中可能包括多个ABC PetroCorp工厂。 他将能够查看该地区所有工厂的数据。

ABC PetroCorp的.csv文件包含虚拟用户电子邮件地址。 他们需要用真实的代替,因为那样的话,将会有信件来激活他们。 例如,如果您的真实邮件是“ john.smith@sap.com”,那么您需要将名称<>替换为“ john.smith”,并将<< insert_your_company >>替换为“ sap”。

转到身份验证服务的管理控制台,然后选择选项卡“用户和授权”->“导入用户”。 选择先前创建的应用程序点“ ABC_PetroCorp_IDP”,然后单击“浏览”,然后选择描述我们的演示用户的文件“ ABCPetroCorp.csv”,然后单击“导入”按钮。

用户必须激活他们的帐户。 要接收带有激活链接的电子邮件,必须在“发送电子邮件”窗口中单击“发送”。
在激活用户之前,您需要更改一些配置。
转到选项卡“用户和授权”->“用户管理”。 用户列表中出现了两个用户:“区域经理”和“工厂主管”。 它们是自动分配的标识符:P000011和P000010。 这些标识符可以用作登录以输入租户(并在进行所有必要设置后进入应用程序)。

让我们转到用户P000011或“区域管理器”并添加一个名称,该名称也可以用作登录名来输入。 为此,请单击“个人信息”字段中的编辑图标,然后填写“登录名”(在本例中为Johan)。

然后点击“保存”。
现在,让我们对用户P000010或Plant Supervisor进行相同的操作,但称他为Smith。

工厂主管的用户应该只能查看有关其工厂的信息,然后在有关公司信息的部分中,有必要指明公司标识符(将在步骤4中说明如何使用该标识符)。
为此,请转到“公司信息”部分,并在“公司”字段中输入工厂标识符,即“ 101”。
现在,有关我们用户的信息已更改。 要激活它们,请转到“ csv”文件中指定的邮箱,然后单击激活链接,或单击“单击此处激活您的帐户”。

因此,我们已经成功地将用户导入SCI租户,更新了有关他们的信息并激活了他们。
步骤3:在SAP Cloud Platform中的应用程序级别为用户分配角色
由ITeLO Consulting的Robert创建的多租户污染监控应用程序提供了两个预定义的角色PlantSupervisor和AreaManager,它们可以控制应用程序中的用户授权并确定最终用户所看到的内容。
- PlantSupervisor角色:分配了此角色的用户将只能查看SCI租户的“公司信息”中标识的工厂中的数据。
- “ AreaManager”角色:分配了此角色的用户将能够查看其区域中所有工厂的数据。
让我们看看如何在项目代码级别实现角色分离。
让我们继续前进到路径/污染监控中的web.xml文件
/src/main/webapp/WEB-INF/web.xml”位于项目文件夹中。
打开文件,并确保在应用程序中定义了以上两个角色。

现在,转到项目路径“ /pollutionmonitoring/src/main/java/com/sap/hana/cloud/samples/pollutionmonitoring/api/PollutionDataService.java”中的文件“ PollutionDataService.java”并打开它。
该文件中指示方法“ getCompanyPollutionData()”。 它使您可以检查用户是否是管理员(经理)。 如果是,则应用程序显示所有植物的数据,如果不是,则按植物ID(plant_id)过滤数据。 同样,该应用程序将仅显示其标识符与用户信息中指示的标识符相对应的那些植物的信息。

为了清楚起见,您可以引用isUserAdmin()方法,该方法允许您通过角色确定用户是否是管理员(经理)。

使用类似的算法从本地系统提取工厂数据。

现在,作为ABC PetroCorp的雇员的Emily需要通过在SCP的应用程序中分配相应的角色(ABCPlantSupervisor和ABCAreaManager)来确定区域经理和工厂经理。
我们将转到ABC PetroCorp客户端的子帐户,然后选择由ITeLO Consulting提供商提供的污染监测Java应用程序(位于应用程序选项卡->订阅选项卡中)。

接下来,转到“角色”选项卡(在应用程序级别)。
在打开的窗口中,将显示应用程序中指示的角色列表。 选择“ PlantSupervisor”角色,然后单击“分配”。 在出现的窗口中,输入用户ID,在SCI租户中表示为“ ABCPlantSupervisor”。 在我们的情况下,该用户的标识符将为P000010。
然后选择角色“ AreaManager”,然后单击“分配”。 在出现的窗口中,输入SCI租户中表示为“ ABCAreaManager”的用户标识符(在我们的情况下,该用户的标识符将为P000011)。

因此,我们已经成功地将应用程序的角色与SCI租户的ABC PetroCorp的相应用户进行了比较。
可以在另一个客户的子帐户中应用相同的设置(例如,“ XYZ EnergyCorp”)。
步骤4:在SCI租户和SCP控制面板中配置属性以传输到应用程序
来自ITeLO Consulting的Robert对多租户应用程序进行了编程,以便他需要将PlantSupervisor用户ID传递给工厂,以便可以在应用程序中针对该特定工厂ID过滤出工厂数据。
在前面的步骤中,我们将工厂标识符添加到了“公司信息”字段中SCI租户中的用户“ PlantSupervisor”,现在我们需要将其转移到多租户应用程序中。 然后可以在应用程序中使用它来显示与特定工厂有关的数据。 AreaManager用户本质上是一个管理员,可以查看所有工厂的数据。
让我们看看如何在应用程序代码级别组织它。
打开项目中路径“ /pollutionmonitoring/src/main/java/com/sap/hana/cloud/samples/pollutionmonitoring/api/PollutionDataService.java”上的文件“ PollutionDataService.java”。
此文件描述了getPlantId()方法。 此方法描述获取用户名并检查“ PLANT_ID”属性,该属性用于过滤污染数据和工厂数据。

我们可以通过SAML断言属性将用户属性从SCI租户传输到应用程序。 这是必要的,以便在用户登录时SCP读取包含公司信息的SCI租户的用户属性。 为用户定义的所谓“断言属性”(批准属性)需要转移到污染监测应用程序。
为此,首先在SCI租户中创建“断言属性”,然后-在子帐户“ ABC PetroCorp”的主属性(“主体属性”)中指定批准属性,可由应用程序代码读取,如上所示。
转到身份验证服务的管理控制台,然后选择选项卡“应用程序和资源”->“应用程序”。 选择我们需要的应用程序(ABC_PetroCorp_IDP),然后在“信任”选项卡中,单击“断言属性”。

现有属性列表将出现,我们还需要一个。 为此,请单击“添加”按钮,然后选择“公司”属性。
然后,将“ plant_id”(区分大小写)添加到属性值,然后单击“保存”。

现在转到SCP中的子帐户“ ABC PetroCorp”,然后转到“安全”->“信任”选项卡。 在“信任管理”窗口中,转到“应用程序身份提供程序”选项卡,然后选择与子帐户关联的IDP。

在打开的窗口中,转到“属性”选项卡,然后单击“添加基于断言的属性”。 在“断言属性”字段中,输入值“ plant_id”(与SCI租户中一样),在“主要属性”字段中,输入“ PLANT_ID”(该值将作为工厂代码传输到应用程序中)-然后单击“保存”。
因此,我们已经在SCI租户和SCP控制面板中成功配置了属性,以将其传输到应用程序。
步骤5:验证设定
Emily现在可以验证是否已为SCP中的“ ABC PetroCorp”子帐户以及提供商提供的应用程序正确定义了SCI租户(IdP)设置。
为此,请转到子帐户“ ABC PetroCorp”,然后转到HTML5应用程序“ pollutionmonitoringui”(位于“应用程序”->“订阅”标签中)。

将链接复制到应用程序。 以隐身模式在浏览器中打开一个新标签,并插入指向HTML5应用程序的链接。 将出现一个用于输入应用程序的窗口,其中将显示SCI租户中指示的名称。
如果一切设置正确,则应该能够在SCI租户中指示的“ AreaManager”和“ PlantSupervisor”用户下输入应用程序。
在我们的案例中,该区域的经理是用户Johan(P000011),工厂的负责人是Smith(P000010)。 您可以使用用户名或其标识符作为登录名在这些用户下输入应用程序。
注意:在此阶段进入应用程序时,将不会显示任何数据。 这是正常现象,因为配置尚未完成,并且本地系统未连接。
因此,我们已经与SCP污染监控应用程序建立了身份提供者(IDP)连接。 我们还导入了用户,并为他们分配了访问应用程序的正确角色,以确保将正确的工厂信息传输到该应用程序。