From 4d6f7ef8ff14e4a6e81e13dc280a3802e848c9fa Mon Sep 17 00:00:00 2001 From: Karuna Vengurlekar Date: Fri, 7 Aug 2026 14:40:59 +0530 Subject: [PATCH 1/7] Add new doc --- .../modules/fds-gateway-login-connector.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md diff --git a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md new file mode 100644 index 00000000000..20501554bee --- /dev/null +++ b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md @@ -0,0 +1,48 @@ +--- +title: "FDS Gateway Login Connector" +url: /appstore/modules/fds/ +description: "" +##If moving or renaming this doc file, implement a temporary redirect and let the respective team know they should update the URL in the marketplace. +--- + +## Introduction + +The [FDS Gateway Login Connector](placeholder) enables Single Sign-On (SSO) for Siemens products by integrating Mendix applications with Siemens Foundational Services (FDS). + +Instead of authenticating users directly, the connector delegates authentication to the FDS Gateway, the shared identity platform for Siemens Xcelerator products. Depending on the customer's FDS configuration, users can sign in using either their Siemens ID or their organization's workforce identity provider, such as Microsoft Entra ID. This provides a consistent and secure authentication experience while allowing organizations to continue using their existing identity and access management (IAM) infrastructure. + +The connector supports federated authentication by relying on the identity relationships configured in FDS. This enables Mendix applications to integrate seamlessly with the Siemens Xcelerator ecosystem while centralizing authentication and identity federation in the FDS platform. + +### Typical Usage Scenarios + +* Build an Xcelerator product part of the product with Mendix. End-users of the product can sign in at Siemens FDS IAM. Recommended approach is to let the FDS Gateway interact with FDS IAM and provide tokens to your product application for authentication. +* You can build single-tenant products for contracted customers or multi-tenant products for prospective customers to evaluate your products before purchase. + +### Features and Limitations + +#### Features + +* Login session initiation: After the FDS gateway authenticates the end user through FDS IAM, the FDS Gateway Login Connector initiates a local session in the Mendix application. The application does not display its own login page as FDS handles authentication providing seamless Single Sign-On experience for end users. + +* Just-in-time user provisioning: When a user sign infor the first time, the connector atomatically creates a corresponding user account in the Mendix application based on the JWT claims received. You can use the default provisioning logic or implement custom provisioning. For recurring uses, the connector can also update user information using provisioning logic during sign-in. + +* Role-based access control in FDS applications: Assign user roles dynamically based on claims in the JWT-tokens received from FDS. This allows centralized authorization managementwith role based access control. + +* Tenancy support: The connector supports multi-tenant by making a tenant indicator (identifier) available when a user logs in. Your application can use this identifier to ensure users can access only the data for their own tenant. the connector provides the tenant information, while you must develop tenancy structure. + +#### Limitations + +* No synchronized session management: Authentication is delegated to the FDS Gateway, but session management is handled independently by the Mendix application. Changes to a user's login state in FDS, such as logging out or session expiration, are not synchronized with active Mendix sessions. Similarly, logging out from FDS does not automatically log the user out of the Mendix application. + +## Dependencies + +* [Encryption module](https://marketplace.mendix.com/link/component/1011) +* [Community Commons module](https://marketplace.mendix.com/link/component/170) + +## Installation + +### Prerequisites + +Before configuring the FDS Gateway Login Connector, the application must be onboarded to Siemens Foundational Services (FDS). To onboard an application and publish services within the Siemens FDS ecosystem, follow [Launch a XaaS offering: end-to-end journey](https://developer.internal.siemens.com/fds/fds_getting_started/recipes/Web-Application/index.html). + +For onboarding support or questions regarding FDS services, contact [FDSOne Help Portal](https://fdsone.atlassian.net/servicedesk/customer/user/login?destination=portals). From faa7329883afe4ac622c136153726b7e8e9d2360 Mon Sep 17 00:00:00 2001 From: Karuna Vengurlekar Date: Fri, 7 Aug 2026 17:08:42 +0530 Subject: [PATCH 2/7] Add installation and configurations --- .../modules/fds-gateway-login-connector.md | 107 +++++++++++++++++- 1 file changed, 103 insertions(+), 4 deletions(-) diff --git a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md index 20501554bee..299a3975f5b 100644 --- a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md +++ b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md @@ -32,17 +32,116 @@ The connector supports federated authentication by relying on the identity relat #### Limitations -* No synchronized session management: Authentication is delegated to the FDS Gateway, but session management is handled independently by the Mendix application. Changes to a user's login state in FDS, such as logging out or session expiration, are not synchronized with active Mendix sessions. Similarly, logging out from FDS does not automatically log the user out of the Mendix application. +* No synchronized session management: Authentication is delegated to the FDS Gateway, but session management is handled independently by the Mendix application. Changes to a user's login state in FDS gateway are not propagated to active Mendix session. +* FDS initiated logout is not supported. ## Dependencies * [Encryption module](https://marketplace.mendix.com/link/component/1011) * [Community Commons module](https://marketplace.mendix.com/link/component/170) -## Installation - -### Prerequisites +## Prerequisites Before configuring the FDS Gateway Login Connector, the application must be onboarded to Siemens Foundational Services (FDS). To onboard an application and publish services within the Siemens FDS ecosystem, follow [Launch a XaaS offering: end-to-end journey](https://developer.internal.siemens.com/fds/fds_getting_started/recipes/Web-Application/index.html). For onboarding support or questions regarding FDS services, contact [FDSOne Help Portal](https://fdsone.atlassian.net/servicedesk/customer/user/login?destination=portals). + +## Installation + +1. Import the [FDS Gateway Login Connector](placeholder) module into your app from the Mendix Marketplace. +2. Configure After Startup microflow in the **Runtime** tab of **App Settings** and add the `FDSGatewayLoginConnector.ASU_InitializeFDSGatewayLoginConnectorAuth` microflow as the **After startup** microflow. +3. Configure login page. For more information, refer to xxxxxxxxxxxx section below. +4. Configure the required constants mentioned in the xxxxxxx section below. + +## Configuration + +### Configuring the Constants {#constants} + +The following constants are mandatory: + +* **FDSGatewayLoginConnector.JWTIssuer** – Expected JWT issuer (`iss`) value. + + Example: `https://{devtenant}.{region}.sws.siemens.com/oauth/token` + +{{% alert color=”info” %}} +**devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD). +{{% /alert %}} + +* **FDSGatewayLoginConnector.JWTJKU** – URI pointing to the JSON Web Key Set (JWKS) published by FDS IAM, used to verify token signatures. Defined as a JOSE header parameter in [RFC 7515](https://www.rfc-editor.org/rfc/rfc7515). + + Example: `https://{devtenant}.{region}.sws.siemens.com/token_keys` + +{{% alert color=”info” %}} +**devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD). +{{% /alert %}} + +* **FDSGatewayLoginConnector.EnableLocalAuth** (*default: False*) – Enable or disable local login. + +* **FDSGatewayLoginConnector.JWTValidationLeeway** (*default: 0*) – Allowed JWT time validation leeway. + +* **FDSGatewayLoginConnector.UserProvisioning** (*default: FDSGatewayLoginConnector.CUSTOM_UserProvisioning*) – User provisioning microflow. + +For more information, refer to [Constants](/refguide/constants/). + +## SSO + +To allow SSO, the usual `login.html` needs to be replaced with a different file (sso-login.html). + +Delete the following lines: + +```javascript +if (\!document.cookie || \!document.cookie.match(/(^|;)originURI=/gi)) +document.cookie = "originURI=/login.html"; +``` + +and directly after the script of the X-XRSR put the following script + +```javascript + +``` + +{{% alert color="info" %}} +Create the `sso-login.html` yourself in the folder /theme/web/public. See the [sso-login.html]() section below. +{{% /alert %}} + +## sso-login.html{#sso-ligin} + +A new login file `sso-login.html` is needed to support SSO. Create a `sso-login.html` file in the folder /theme/web/public with the following content if you are configuring your existing Mendix app manually. + +```html + + + + + Insights Hub + + + + +``` + +## Custom User Provisioning + +The FDS Gateway Login Connector module provides `FDSGatewayLoginConnector.CUSTOM_UserProvisioning` as the default user provisioning microflow. By default, it processes the JWT payload, creates or updates users in `System.User`, and assigns user roles. + +Why you may need a custom User provisioning microflow: + +* If your application uses a custom user entity (specialized from `System.User`), you can implement your own provisioning logic to store additional user information. + +* Using a custom User entity may be usefull when you want to implement tenancy-logic in your application. In this case your custom user entity may have an attribute for the user that captures the tenant. + +To use custom user provisioning, do the following: + +1. Create a custom user entity inheriting from `System.User`. +2. Create a custom provisioning microflow in your own app. +3. Set the `FDSGatewayLoginConnector.UserProvisioning` constant to your custom microflow. +4. Ensure the custom microflow: + * has a parameter of type String named *RequestJson* + * returns a `System.User` object From 4a2d534fbe1c9c50e6d15c71c0b6766b3b360499 Mon Sep 17 00:00:00 2001 From: Karuna Vengurlekar Date: Fri, 7 Aug 2026 17:42:55 +0530 Subject: [PATCH 3/7] Add proofreading changes --- .../modules/fds-gateway-login-connector.md | 78 +++++++++---------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md index 299a3975f5b..3ce25d67842 100644 --- a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md +++ b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md @@ -1,7 +1,7 @@ --- title: "FDS Gateway Login Connector" url: /appstore/modules/fds/ -description: "" +description: "Describes how to install and configure the FDS Gateway Login Connector to enable Single Sign-On for Mendix applications integrated with Siemens Foundational Services." ##If moving or renaming this doc file, implement a temporary redirect and let the respective team know they should update the URL in the marketplace. --- @@ -9,31 +9,30 @@ description: "" The [FDS Gateway Login Connector](placeholder) enables Single Sign-On (SSO) for Siemens products by integrating Mendix applications with Siemens Foundational Services (FDS). -Instead of authenticating users directly, the connector delegates authentication to the FDS Gateway, the shared identity platform for Siemens Xcelerator products. Depending on the customer's FDS configuration, users can sign in using either their Siemens ID or their organization's workforce identity provider, such as Microsoft Entra ID. This provides a consistent and secure authentication experience while allowing organizations to continue using their existing identity and access management (IAM) infrastructure. +Instead of authenticating users directly, the connector delegates authentication to the FDS Gateway, the shared identity platform for Siemens Xcelerator products. Depending on the customer's FDS configuration, users can sign in using either their Siemens ID or their organization's workforce identity provider, such as Microsoft Entra ID. This provides a consistent, secure authentication experience and allows organizations to continue using their existing identity and access management (IAM) infrastructure. -The connector supports federated authentication by relying on the identity relationships configured in FDS. This enables Mendix applications to integrate seamlessly with the Siemens Xcelerator ecosystem while centralizing authentication and identity federation in the FDS platform. +The connector supports federated authentication by relying on the identity relationships configured in FDS, enabling Mendix applications to integrate seamlessly with the Siemens Xcelerator ecosystem. ### Typical Usage Scenarios -* Build an Xcelerator product part of the product with Mendix. End-users of the product can sign in at Siemens FDS IAM. Recommended approach is to let the FDS Gateway interact with FDS IAM and provide tokens to your product application for authentication. -* You can build single-tenant products for contracted customers or multi-tenant products for prospective customers to evaluate your products before purchase. +* Build an Xcelerator product with Mendix. End-users sign in through Siemens FDS IAM, with the FDS Gateway handling authentication and providing tokens to your application. +* Build single-tenant products for contracted customers, or multi-tenant products for prospective customers to evaluate before purchase. ### Features and Limitations #### Features -* Login session initiation: After the FDS gateway authenticates the end user through FDS IAM, the FDS Gateway Login Connector initiates a local session in the Mendix application. The application does not display its own login page as FDS handles authentication providing seamless Single Sign-On experience for end users. +* **Login session initiation** – After the FDS Gateway authenticates the end-user through FDS IAM, the connector initiates a local session in the Mendix application. The application does not display its own login page, providing a seamless SSO experience. -* Just-in-time user provisioning: When a user sign infor the first time, the connector atomatically creates a corresponding user account in the Mendix application based on the JWT claims received. You can use the default provisioning logic or implement custom provisioning. For recurring uses, the connector can also update user information using provisioning logic during sign-in. +* **Just-in-time user provisioning** – When a user signs in for the first time, the connector automatically creates a corresponding user account in the Mendix application based on the JWT claims received. You can use the default provisioning logic or implement custom provisioning. On subsequent sign-ins, the connector can also update user information using the same provisioning logic. -* Role-based access control in FDS applications: Assign user roles dynamically based on claims in the JWT-tokens received from FDS. This allows centralized authorization managementwith role based access control. +* **Role-based access control** – User roles are assigned dynamically based on claims in the JWT tokens received from FDS, enabling centralized authorization management. -* Tenancy support: The connector supports multi-tenant by making a tenant indicator (identifier) available when a user logs in. Your application can use this identifier to ensure users can access only the data for their own tenant. the connector provides the tenant information, while you must develop tenancy structure. +* **Tenancy support** – The connector makes a tenant identifier available when a user signs in. Your application can use this identifier to ensure users can only access data for their own tenant. The connector provides the tenant information; you are responsible for implementing the tenancy structure. #### Limitations -* No synchronized session management: Authentication is delegated to the FDS Gateway, but session management is handled independently by the Mendix application. Changes to a user's login state in FDS gateway are not propagated to active Mendix session. -* FDS initiated logout is not supported. +* **No synchronized session management** – Authentication is delegated to the FDS Gateway, but session management is handled independently by the Mendix application. Changes to a user's login state in FDS Gateway are not propagated to active Mendix sessions, and FDS-initiated logout is not supported. ## Dependencies @@ -42,16 +41,16 @@ The connector supports federated authentication by relying on the identity relat ## Prerequisites -Before configuring the FDS Gateway Login Connector, the application must be onboarded to Siemens Foundational Services (FDS). To onboard an application and publish services within the Siemens FDS ecosystem, follow [Launch a XaaS offering: end-to-end journey](https://developer.internal.siemens.com/fds/fds_getting_started/recipes/Web-Application/index.html). +Before configuring the FDS Gateway Login Connector, your application must be onboarded to Siemens Foundational Services (FDS). To onboard an application and publish services within the Siemens FDS ecosystem, follow [Launch a XaaS offering: end-to-end journey](https://developer.internal.siemens.com/fds/fds_getting_started/recipes/Web-Application/index.html). -For onboarding support or questions regarding FDS services, contact [FDSOne Help Portal](https://fdsone.atlassian.net/servicedesk/customer/user/login?destination=portals). +For onboarding support or questions about FDS services, contact the [FDSOne Help Portal](https://fdsone.atlassian.net/servicedesk/customer/user/login?destination=portals). ## Installation 1. Import the [FDS Gateway Login Connector](placeholder) module into your app from the Mendix Marketplace. -2. Configure After Startup microflow in the **Runtime** tab of **App Settings** and add the `FDSGatewayLoginConnector.ASU_InitializeFDSGatewayLoginConnectorAuth` microflow as the **After startup** microflow. -3. Configure login page. For more information, refer to xxxxxxxxxxxx section below. -4. Configure the required constants mentioned in the xxxxxxx section below. +2. In the **Runtime** tab of **App Settings**, set `FDSGatewayLoginConnector.ASU_InitializeFDSGatewayLoginConnectorAuth` as the **After startup** microflow. +3. Configure the login page. For more information, see the [SSO](#sso) section below. +4. Configure the required constants. For more information, see the [Configuring the Constants](#constants) section below. ## Configuration @@ -63,7 +62,7 @@ The following constants are mandatory: Example: `https://{devtenant}.{region}.sws.siemens.com/oauth/token` -{{% alert color=”info” %}} +{{% alert color="info" %}} **devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD). {{% /alert %}} @@ -71,47 +70,47 @@ The following constants are mandatory: Example: `https://{devtenant}.{region}.sws.siemens.com/token_keys` -{{% alert color=”info” %}} +{{% alert color="info" %}} **devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD). {{% /alert %}} -* **FDSGatewayLoginConnector.EnableLocalAuth** (*default: False*) – Enable or disable local login. +The following constants are optional: -* **FDSGatewayLoginConnector.JWTValidationLeeway** (*default: 0*) – Allowed JWT time validation leeway. +* **FDSGatewayLoginConnector.EnableLocalAuth** (*default: False*) – Enables or disables local login. + +* **FDSGatewayLoginConnector.JWTValidationLeeway** (*default: 0*) – Allowed time leeway (in seconds) when validating JWT timestamps. * **FDSGatewayLoginConnector.UserProvisioning** (*default: FDSGatewayLoginConnector.CUSTOM_UserProvisioning*) – User provisioning microflow. -For more information, refer to [Constants](/refguide/constants/). +For more information, see [Constants](/refguide/constants/). -## SSO +## SSO {#sso} -To allow SSO, the usual `login.html` needs to be replaced with a different file (sso-login.html). +To enable SSO, replace the default `login.html` with `sso-login.html`. -Delete the following lines: +In `login.html`, remove the following lines: ```javascript -if (\!document.cookie || \!document.cookie.match(/(^|;)originURI=/gi)) +if (!document.cookie || !document.cookie.match(/(^|;)originURI=/gi)) document.cookie = "originURI=/login.html"; ``` -and directly after the script of the X-XRSR put the following script +Directly after the X-CSRF token script, add the following: ```javascript ``` {{% alert color="info" %}} -Create the `sso-login.html` yourself in the folder /theme/web/public. See the [sso-login.html]() section below. +Create the `sso-login.html` file in `/theme/web/public`. See the [sso-login.html](#sso-login-html) section below. {{% /alert %}} -## sso-login.html{#sso-ligin} +## sso-login.html {#sso-login-html} -A new login file `sso-login.html` is needed to support SSO. Create a `sso-login.html` file in the folder /theme/web/public with the following content if you are configuring your existing Mendix app manually. +Create a `sso-login.html` file in `/theme/web/public` with the following content: ```html @@ -129,19 +128,18 @@ A new login file `sso-login.html` is needed to support SSO. Create a `sso-login. ## Custom User Provisioning -The FDS Gateway Login Connector module provides `FDSGatewayLoginConnector.CUSTOM_UserProvisioning` as the default user provisioning microflow. By default, it processes the JWT payload, creates or updates users in `System.User`, and assigns user roles. - -Why you may need a custom User provisioning microflow: +The connector provides `FDSGatewayLoginConnector.CUSTOM_UserProvisioning` as the default user provisioning microflow. By default, it processes the JWT payload, creates or updates users in `System.User`, and assigns user roles. -* If your application uses a custom user entity (specialized from `System.User`), you can implement your own provisioning logic to store additional user information. +You may need a custom provisioning microflow in the following cases: -* Using a custom User entity may be usefull when you want to implement tenancy-logic in your application. In this case your custom user entity may have an attribute for the user that captures the tenant. +* Your application uses a custom user entity (specialized from `System.User`) and you need to store additional user attributes. +* You want to implement tenancy logic, such as capturing the tenant identifier on a custom user entity attribute. To use custom user provisioning, do the following: 1. Create a custom user entity inheriting from `System.User`. -2. Create a custom provisioning microflow in your own app. -3. Set the `FDSGatewayLoginConnector.UserProvisioning` constant to your custom microflow. +2. Create a custom provisioning microflow in your app. +3. Set the `FDSGatewayLoginConnector.UserProvisioning` constant to point to your custom microflow. 4. Ensure the custom microflow: * has a parameter of type String named *RequestJson* * returns a `System.User` object From 871d843b4f5fbcb98a724fef124531233226e4c6 Mon Sep 17 00:00:00 2001 From: Karuna Vengurlekar Date: Mon, 10 Aug 2026 11:54:46 +0530 Subject: [PATCH 4/7] Additional changes --- .../modules/fds-gateway-login-connector.md | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md index 3ce25d67842..2eb791744f0 100644 --- a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md +++ b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md @@ -36,8 +36,7 @@ The connector supports federated authentication by relying on the identity relat ## Dependencies -* [Encryption module](https://marketplace.mendix.com/link/component/1011) -* [Community Commons module](https://marketplace.mendix.com/link/component/170) +[Community Commons module](https://marketplace.mendix.com/link/component/170) ## Prerequisites @@ -62,19 +61,13 @@ The following constants are mandatory: Example: `https://{devtenant}.{region}.sws.siemens.com/oauth/token` -{{% alert color="info" %}} -**devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD). -{{% /alert %}} + {{% alert color="info" %}}**devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD).{{% /alert %}} * **FDSGatewayLoginConnector.JWTJKU** – URI pointing to the JSON Web Key Set (JWKS) published by FDS IAM, used to verify token signatures. Defined as a JOSE header parameter in [RFC 7515](https://www.rfc-editor.org/rfc/rfc7515). Example: `https://{devtenant}.{region}.sws.siemens.com/token_keys` -{{% alert color="info" %}} -**devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD). -{{% /alert %}} - -The following constants are optional: + {{% alert color="info" %}}**devtenant** refers to the developer environment tenant, not the customer environment tenant (ECAiD).{{% /alert %}} * **FDSGatewayLoginConnector.EnableLocalAuth** (*default: False*) – Enables or disables local login. @@ -84,18 +77,18 @@ The following constants are optional: For more information, see [Constants](/refguide/constants/). -## SSO {#sso} +## Enabling Single Sign-On {#sso} To enable SSO, replace the default `login.html` with `sso-login.html`. -In `login.html`, remove the following lines: +In `index.html`, remove the following lines: ```javascript -if (!document.cookie || !document.cookie.match(/(^|;)originURI=/gi)) +if (\!document.cookie || \!document.cookie.match(/(^|;)originURI=/gi)) document.cookie = "originURI=/login.html"; ``` -Directly after the X-CSRF token script, add the following: +and replace with the following: ```javascript ``` +To use the return path, use the following content instead: + +```html + + + + +    FDS Gateway Login Connector +     + + + + + +``` + ## Custom User Provisioning The connector provides `FDSGatewayLoginConnector.CUSTOM_UserProvisioning` as the default user provisioning microflow. By default, it processes the JWT payload, creates or updates users in `System.User`, and assigns user roles. From bac31b69bef1bb69a66c501c1fde3a88b108ef69 Mon Sep 17 00:00:00 2001 From: Karuna Vengurlekar Date: Mon, 10 Aug 2026 13:45:29 +0530 Subject: [PATCH 5/7] Fix the code --- .../modules/fds-gateway-login-connector.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md index 2eb791744f0..cde0334106a 100644 --- a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md +++ b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md @@ -129,8 +129,8 @@ To use the return path, use the following content instead:     FDS Gateway Login Connector      -``` - -{{% alert color="info" %}} -Create the `sso-login.html` file in `/theme/web/public`. See the [Using SSO login template](#sso-login-html) section below. -{{% /alert %}} - -## Using SSO login template {#sso-login-html} - -Create a `sso-login.html` file in `/theme/web/public` with the following content: - -```html - - - - - FDS Gateway Login Connector - - - - -``` - -To use the return path, use the following content instead: +To enable SSO, create a `sso-login.html` file in `/theme/web/public` with the following content: ```html @@ -144,6 +104,18 @@ To use the return path, use the following content instead: ``` +Update the `originURI` cookie value in `index.html` and use `/sso-login.html` instead of `/login.html` as shown in the code below: + +```html + +``` + ## Custom User Provisioning The connector provides `FDSGatewayLoginConnector.CUSTOM_UserProvisioning` as the default user provisioning microflow. By default, it processes the JWT payload, creates or updates users in `System.User`, and assigns user roles. From d84133c37b732956f555f2419958db7da15043f7 Mon Sep 17 00:00:00 2001 From: Karuna Vengurlekar Date: Fri, 14 Aug 2026 11:25:10 +0530 Subject: [PATCH 7/7] Add feedback and architecture image --- .../modules/fds-gateway-login-connector.md | 40 +++++++++++------- .../modules/fds/fds-connector.png | Bin 0 -> 89912 bytes 2 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 static/attachments/appstore/platform-supported-content/modules/fds/fds-connector.png diff --git a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md index 7e9b979598e..0aeedb0e0f8 100644 --- a/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md +++ b/content/en/docs/marketplace/platform-supported-content/modules/fds-gateway-login-connector.md @@ -9,34 +9,44 @@ description: "Describes how to install and configure the FDS Gateway Login Conne The [FDS Gateway Login Connector](placeholder) enables Single Sign-On (SSO) for Siemens products by integrating Mendix applications with Siemens Foundational Services (FDS). -Instead of authenticating users directly, the connector delegates authentication to the FDS Gateway, the shared identity platform for Siemens Xcelerator products. Depending on the customer's FDS configuration, users can sign in using either their Siemens ID or their organization's workforce identity provider, such as Microsoft Entra ID. This provides a consistent, secure authentication experience and allows organizations to continue using their existing identity and access management (IAM) infrastructure. +Instead of authenticating users directly, the connector delegates authentication to the FDS Gateway, a shared access layer for Siemens Xcelerator applications and services that integrates with FDS IAM. Depending on the customer's FDS configuration, users can sign in using either their Siemens ID or their organization's workforce identity provider, such as Microsoft Entra ID. This provides a consistent, secure authentication experience and allows organizations to continue using their existing identity and access management (IAM) infrastructure. -The connector supports federated authentication by relying on the identity relationships configured in FDS, enabling Mendix applications to integrate seamlessly with the Siemens Xcelerator ecosystem. +The connector abstracts the underlying OpenID Connect (OIDC) integration with Siemens Foundational Services, reducing the need for application-specific identity provider configuration. -### Typical Usage Scenarios +This connector is intended for Siemens Xcelerator products and other applications that are required to authenticate users through Siemens Foundational Services (FDS). -* Build an Xcelerator product with Mendix. End-users sign in through Siemens FDS IAM, with the FDS Gateway handling authentication and providing tokens to your application. -* Build single-tenant products for contracted customers, or multi-tenant products for prospective customers to evaluate before purchase. +The following diagram gives an overview of architecture of the connector: -### Features and Limitations +{{< figure src="/attachments/appstore/platform-supported-content/modules/fds/fds-connector.png" alt="Architecture diagram showing a client connecting to Your App via FDS Gateway, which authenticates with FDS IAM and forwards requests with a JWT." >}} -#### Features +{{% alert color="info" %}} +Siemens Access Management (SAM) and SAMv2 are legacy names for what is now called FDS IAM and FDS Gateway in current Siemens Foundational Services terminology. +{{% /alert %}} + +## Typical Usage Scenarios + +* Build a Siemens Xcelerator product with Mendix that must authenticate users through Siemens Foundational Services (FDS). End-users sign in through Siemens FDS IAM, with the FDS Gateway handling authentication and providing tokens to your application. +* Build single-tenant deployments for contracted customers, or multi-tenant evaluation environments for prospective customers, while using Siemens Foundational Services for user authentication. + +## Features and Limitations + +### Features * **Login session initiation** – After the FDS Gateway authenticates the end-user through FDS IAM, the connector initiates a local session in the Mendix application. The application does not display its own login page, providing a seamless SSO experience. -* **Just-in-time user provisioning** – When a user signs in for the first time, the connector automatically creates a corresponding user account in the Mendix application based on the JWT claims received. You can use the default provisioning logic or implement custom provisioning. On subsequent sign-ins, the connector can also update user information using the same provisioning logic. +* **Just-in-time user provisioning** – The connector does not require pre-provisioning of users into your app. When a user signs in for the first time, the connector automatically creates a corresponding user account in the Mendix application based on the JWT claims received. You can use the default provisioning logic or implement custom provisioning. On subsequent sign-ins, the connector can also update user information using the same provisioning logic. * **Role-based access control** – User roles are assigned dynamically based on claims in the JWT tokens received from FDS, enabling centralized authorization management. -* **Tenancy support** – The connector makes a tenant identifier available when a user signs in. Your application can use this identifier to ensure users can only access data for their own tenant. The connector provides the tenant information; you are responsible for implementing the tenancy structure. +* **Tenancy support** – The connector exposes tenant information supplied by FDS. Your application is responsible for implementing tenant isolation, data partitioning, and authorization logic. -#### Limitations +### Limitations -* **No synchronized session management** – Authentication is delegated to the FDS Gateway, but session management is handled independently by the Mendix application. Changes to a user's login state in FDS Gateway are not propagated to active Mendix sessions, and FDS-initiated logout is not supported. +* **Independent session management** – Authentication is delegated to the FDS Gateway, but session management is handled independently by the Mendix application. Changes to a user's login state in FDS Gateway are not propagated to active Mendix sessions, and FDS-initiated logout is not supported. ## Dependencies -[Community Commons module](https://marketplace.mendix.com/link/component/170) +* [Community Commons module](https://marketplace.mendix.com/link/component/170) ## Prerequisites @@ -48,7 +58,7 @@ For onboarding support or questions about FDS services, contact the [FDSOne Help 1. Import the [FDS Gateway Login Connector](placeholder) module into your app from the Mendix Marketplace. 2. In the **Runtime** tab of **App Settings**, set `FDSGatewayLoginConnector.ASU_InitializeAuth` as the **After startup** microflow. -3. Configure the login page. For more information, see the [SSO](#sso) section below. +3. Configure the login page. For more information, see the [Configuring the SSO Redirect](#sso) section below. 4. Configure the required constants. For more information, see the [Configuring the Constants](#constants) section below. ## Configuration @@ -77,7 +87,7 @@ The following constants are mandatory: For more information, see [Constants](/refguide/constants/). -## Enabling Single Sign-On {#sso} +### Configuring the SSO Redirect {#sso} To enable SSO, create a `sso-login.html` file in `/theme/web/public` with the following content: @@ -116,7 +126,7 @@ Update the `originURI` cookie value in `index.html` and use `/sso-login.html` in      ``` -## Custom User Provisioning +### Custom User Provisioning The connector provides `FDSGatewayLoginConnector.CUSTOM_UserProvisioning` as the default user provisioning microflow. By default, it processes the JWT payload, creates or updates users in `System.User`, and assigns user roles. diff --git a/static/attachments/appstore/platform-supported-content/modules/fds/fds-connector.png b/static/attachments/appstore/platform-supported-content/modules/fds/fds-connector.png new file mode 100644 index 0000000000000000000000000000000000000000..8041f9c406b06d102bff82c700735f02b8d29ce3 GIT binary patch literal 89912 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