跳转至

为 MindSphere 开发 Mendix 应用

这个非详尽的列表向您概述了成功开发一个集成到 MindSphere 的 Mendix 应用需要考虑的重要方面和限制。有关如何部署 Mendix 应用到 MindSphere 的更多信息,请参考分步说明

应用名称

与 Mendix 不同,MindSphere 对应用名称有多重限制:

  • 只包含小写字母数字字符和特殊字符,-_.不允许
  • 以字母开头
  • 长度不超过20个字符
  • 在您的租户中唯一

当您命名您的 Mendix 应用时,如果您想让您的名称在 MindSphere 和 Mendix 中保持一致,请牢记这些限制。

授权 MindSphere REST 调用

对 MindSphere APIs 的 REST 调用需要一个访问令牌随请求一起发送。对于这类调用,使用 MindSphere 单点登录模块中提供的访问令牌连接器创建工作流,这类工作流包含以下项:

  • 如果令牌为空,Access Token项后的分割将导致工作流正确中止。
  • 在收到对 REST 调用的响应后删除访问令牌。否则,应该避免将完整的令牌传输到用户的浏览器。

以下图表展示了一个示例工作流:

访问令牌工作流

Cloud Foundry 堆栈

确保总是使用 MindSphere 中最新可用的 Cloud Foundry 堆栈。在2019年4月结束之前推送到 MindSphere 的应用也许使用了堆栈 cflinuxfs2,但必须移植

通过cf app {app_name}命令查看您的应用使用的堆栈。

本地测试

当您的应用进行本地测试时,例如在 MindSphere 环境以外, 你不会自动拥有一个访问 MindSphere APIs 的有效访问令牌。针对这种情况,MindSphere 单点登陆模块提供本地开发文件夹。

常量

凭证

当在本地运行您的应用时,您不能通过 SSO 获取您的凭证。相反,您以 MxAdmin 登陆,并被要求通过登陆屏幕手动输入凭证。可以配置 MindSphere 单点登录模块以使用应用或服务凭证。

应用凭证

当您的应用进行本地测试时,您必须提供应用凭证,如此以来 MindSphere 单点登录模块可以生成一个访问 MindSphere APIs 的令牌。 为此,会打开以下登入画面:

登陆画面

客户端ID客户端密钥是前面提到的应用凭证,如下所示,它们由使用 MindSphere Developer Cockpit 发出:

  1. 注册应用并确保应用名称和常量Cockpit应用名称相同。
  2. 打开 Developer Cockpit。
  3. 授权管理选项卡中,导航到应用凭证页面。
  4. 选择想要的应用和应用版本。
  5. 点击发布访问以此获取令牌。

    发布访问

  6. 选择访问层次并点击提交.

    访问层级

  7. 客户端ID客户端密钥记录下来。

    凭证

服务凭证

信息

如果可能,推荐使用应用凭证。

如果应用凭证不可用,您可以配置 MindSphere 单点登录模块以使用服务凭证作为后备。在这种情况下,以下登陆屏幕将在本地运行您的应用时打开:

Login Screen Service Credentials

凭证ID密码是上述服务凭证,可通过向 Global Technical Access Center GTAC 的服务请求进行请求,参见这里

配置

以下常量需要在本地开发文件夹中设置:

常量 描述
AskForCredentialsOnStartUp 如果设置为 TRUE,用户将在应用程序启动前看到一个登录画面,以输入应用凭证。如果设置为 FALSE,这个登录画面将在 SSO 模块第一次尝试检索 MindSphere API 调用的访问令牌时出现。
CockpitApplicationVersion 指定了在 MindSphere 的 Developer Cockpit 中注册的 Mendix 应用的版本。登录画面中输入的应用凭证只有是在为这个版本生成时才被接受。
CredentialsType 如果设置为 TRUE,将打开一个用于输入应用凭据的登录屏幕,以请求 MindSphere 令牌。否则,将打开用于输入服务凭据的登录屏幕。
默认:TRUE
EnableLocalMindSphereApiReverseProxy 通过添加一个新的端点 / API /** 到该应用,启动一个 MindSphere API 调用的反向代理。 这个端点添加一个 MindSphere 令牌来直接调用 MindSphere APIs。这些APIs不是微流的一部分,但是在 avaScript 代码中。例如,当使用 MindSphere OS Bar 的时候。
HostTenant 指定了应用注册和服务凭证已发出的租户的名称。
UserTenant 指定了使用该应用的租户名称。如果该应用是在开发者租户上注册的,则该名称必须与上面的名称相同。如果该应用是在操作员租户上注册的,您可以输入一个不同的租户,该租户已被授予访问该应用程序的权限,以测试多租户。

用户角色

当在您的应用中测试不同的角色时,请不要使用演示用户。不然这会错误地填充 MindSphere 中的租户和角色信息。相反,请将角色分配给 MxAdmin,重新部署,然后再次登录。

不要为您的 MindSphere 应用创建本地用户,因为这些用户不能正确地映射到 MindSphere 范围。

许可 Mendix 应用

Mendix 在部署应用时,应用一种许可模型。应用被默认地当作 Free App, 并施加Mendix Cloud 文件中列出的限制。请注意一些限制仅对部署在 Mendix Cloud 的应用适用。最重要的两个针对通过 Cloud Foundry 在 MindSphere 部署的应用的限制是:

  • 您最多可以拥有10个用户。
  • 应用在1-2小时候后进入睡眠模式。

使用订阅密钥以使您在操作员租户上的应用启动持续运行(例如:没有睡眠模式)。订阅密钥必须在应用部署期间,通过以下命令添加到 Cloud Foundry 环境变量:

1
2
cf set-env {app_name} LICENSE_ID {UUID}
cf set-env {app_name} LICENSE_KEY {license_key}

有关如何部署在操作员租户上的应用为生产环境使用的细节,请参考 Operator Cockpit manual 中的 "Manual deployment of an application" 章节"。

Mendix 密码规则

当一个新用户在 SSO 中被识别,SSO 进程为该用户生成一个固定长度的随机密码。密码规则是为了在 MindSphere starter 和示例应用中接受这些密码而设置的并且不应该被更改。如果您是从头开始开发您的应用,请参考有关项目安全的 Mendix 文件来设置合适的密码规则。

Mendix 密码规则

MindSphere 图标

MindSphere 主题包为您在应用里面的使用提供 MindSphere 图标和图标字体。这些图标被自动地列在选择图标对话里并且可以被他们的源模块 MindSphere_UI_Resources 识别:

MindSphere 图标

MindSphere 图标字体可以用在能够分配 CSS 类的 Mendix UI element,例如:按钮、文本、菜单。请像下述一样使用这些字体:

  1. 通过双击 UI element,打开合适的对话。
  2. 选择在图标属性里的 (none)
  3. 添加以下定义到属性:

    1
    iconMdsp {icon_name}
    

MindSphere 图标字体

多租户

MindSphere 应用总是被设计为多租户兼容的,这意味着单个应用实例可以服务多个租户。租户指定数据访问由 MindSphere's Identity 和 Access Management 控制。

由 MindSphere 网关控制的访问

一个授权的 HTTP header在每个 MindSphere API 调用中传递。MindSphere 网关验证用户是否有获取请求的数据的权限。

在 Mendix 应用中的控制

Mendix 应用也支持持续的实体,这种实体可以被所有用户访问(受制于他们用户角色的访问授权)。因此,需要额外的访问控制使得 MindSphere 中的 Mendix 应用与多租户概念兼容。以下的说明解释了如何使用MindSphere 单点登录模块提供的租户名称来使得 Mendix 应用中的多租户成为可能。

  1. 使所有具有 TenantId 属性的持续实体专门化 MindSphereSingleSignOn.TenantObject 的实体。
    这保证了他们与用户的租户关联。
  2. 任何在该对象上的动作必须有以下 XPath 约束:
    [MindSphereSingleSignOn.TenantObject_Tenant/MindSphereSingleSignOn.Tenant/MindSphereSingleSignOn.MindSphereAccount_Tenant='[%CurrentUser%]']
    这保证了用户只能使用他们的 TenantId 访问租户指定的实体。

窍门

为了保持一致性,建议始终使用包含 XPath 约束的子微流访问具有 TenantId 属性的持久实体。这样子做加强了多租户的安全性。

信息

目前,您不能自动应用这些访问限制。
它们只适用于具有 TenantId 属性的持久实体。

示例

您有一些需要持续存储在数据库中的 assets。然后,您希望获得所有 assets 的列表。

  1. 创建含有 Asset 实体域模型作为 MindSphereSingleSignOn.TenantObject 的专门化。 创建域模型
  2. 实现一个返回所有 assets 列表的子微流。
  3. 将 XPath 约束应用于微流的 Retrieve Objects 动作。 访问令牌

  4. 当您想要检索 assets 列表时,请调用此微流而不是使用检索对象操作。这确保了基于租户的安全性被应用。

角色和范围

Mendix 和 MindSphere 都使用角色来管理应用用户的访问权限。这需要将 Mendix 的用户角色映射到 MindSphere 应用范围,它是在MindSphere 单点登录模块中实现的。它读取每个 HTTP 请求所提供的用户令牌,提取应用范围,并将它们映射到 Mendix 用户角色 以登录到应用。这种映射被定义为 MindSphere 应用范围和 Mendix 用户角色名称的不区分大小写比较。例如,MindSphere 应用范围 {app_name}.customScope1 映射到 Mendix 角色 CUSTOMscope1 和/或 customscope1 角色。

请确保定义了 Mendix 用户角色和 MindSphere 应用范围,这样映射才能成功。

在 Starter 应用中的预配置角色

在 starter 应用中,Mendix 用户角色 AdminUser 被预先配置。

Mendix 角色

对于 starter 应用的应用范围应像下面所示,在 MindSphere 中被定义。注意应用范围和 Mendix 用户角色的命名必须和上面解释的一样:

MindSphere 范围

审核

您的应用必须至少符合准备好在生产环境中使用应用列出的要求。

限制

以下限制适用于部署到 MindSphere 的 Mendix 应用。

如果这些限制影响了应用的设计,您也可以在 MindSphere 外运行您的 Mendix 应用,并调用使用服务凭证的 MindSphere api。但是,您不能简单地将它集成到 MindSphere Launchpad 或使用单点登录。

二进制文件存储

MindSphere 目前没有兼容的文件服务可用于其 Cloud Foundry 堆栈。因此,您不能使用任何依赖于文件服务的 Mendix 功能。这意味着您不能对 System.FileDocument 实体进行任何专门化,这包含所有 System.Image entity 的专门化。

您可以在持续实体中存储少量二进制信息。然而,数据库管理系统对二进制属性的大小有严格的限制,使用它们替代 FileDocument 实体可能会导致性能问题。

或者,您可以使用单独的 AWS S3 bucket。参见在 Mendix Cloud Foundry Buildpack GitHub Repository 中的配置外部文件存储库。这需要使用 Cloud Foundry 命令行接口设置 Cloud Foundry 环境变量。

云服务平台

Mendix 应用目前仅在Europe 1可以被部署到 MindSphere。

退出 MindSphere

当用户退出 MindSphere,Mendix 应用不会删除会话 cookie。如果在cookie过期之前,另一个用户在同一台计算机上的同一浏览器中重新打开应用,则会获取前一个用户的会话。

退出

角色和范围

MindSphere 支持最多5个应用角色。您应当记住这点当您在设计 Mendix 应用的安全性时。

相关链接

还有问题?

向社区提问


除非另行声明,该网站内容遵循MindSphere开发许可协议