Microsoft Entra ID Authentication
Last updated
Last updated
Azure Active Directory (Azure AD) has been renamed Microsoft Entra ID (ME-ID). While the WorkflowGen documentation has been updated to reflect this name change, the WorkflowGen application settings still refer to Azure AD (for example, Azure AD SCIM v2
directory connector).
Likewise, certain ME-ID configuration items in the Azure portal have been renamed and/or moved. The WorkflowGen documentation has been updated accordingly, but still might not be completely accurate in this regard. See the documentation for more information.
This section provides instructions on how to configure WorkflowGen delegated authentication with Microsoft Entra ID (ME-ID) authentication via the Microsoft Identity Platform v2.0 or API endpoint v1 providers, and will show you how to set up a working WorkflowGen instance that uses ME-ID to authenticate your users.
Make sure to have a licensed copy of WorkflowGen installed and running on an IIS web server in HTTPS secure connection mode.
You must be a WorkflowGen Administrator.
Make sure to have ME-ID Administrator access to be able to configure ME-ID.
Make sure to have provisioned an existing ME-ID user that you can authenticate with WorkflowGen and that the user has WorkflowGen Administrator permissions. This is important because once you've activated the delegated authentication with ME-ID, you'll still need to be able to manage the WorkflowGen web application.
AES encryption mode and its key are required for the authentication to work.
The configuration of ME-ID is done in two parts. First, you have to register the WorkflowGen web application and link it to your instance of WorkflowGen; then, you have to register the WorkflowGen GraphQL API in order to be able to register other custom applications to access it.
In the Azure portal, click App registrations in the Azure services section.
Click New registration, and fill in the properties form:
Name: WorkflowGen Web app
Supported account type: Account in this organizational directory only (Default Directory only - Single tenant)
✏️ Note: Depending on the context, you should choose the right option for your use case for the Supported account type value.
Redirect URI:
Platform: Web
Value: https://<workflowgen url>/auth/callback
📌 Example: https://mycompany.com/wfgen/auth/callback
Click Register at the bottom of the page.
You should now see the WorkflowGen Web app
application registration's overview page.
Now, you have to generate a client secret to be used by the WorkflowGen OIDC authentication module.
Click Add a certificate or secret.
In the Client secrets section, click New client secret.
Description: My secret
, or something to know that this is the client secret.
Expires: Choose 730 days (24 months) or your desired expiration period.
Click Add.
The auto-generated client secret is now displayed under the Value column. Copy the client secret value and save it somewhere safe, since you won't be able to retrieve it afterwards.
It's no longer possible to set client secrets to never expire. You'll need to manually regenerate a new client secret every two years (if the 24 months option was selected) before it expires. Then, update the client secret used by WorkflowGen instance in its web configuration file (ApplicationSecurityAuthClientSecret
key).
In order for the communication between the WorkflowGen instance and ME-ID to work, you need to add one more authorized redirect URI to the WorkflowGen Web app
application registration.
Under Redirect URIs on the application's overview page, click Add a Redirect URI.
Enter the following information:
Redirect URI: https://<workflowgen url>/auth/logout/return
📌 Example: https://mycompany.com/wfgen/auth/logout/return
✏️ Note: You should also see https://<workflowgen url>/auth/callback
in this list.
Click Save at the bottom of the section.
In order to expose the WorkflowGen GraphQL API, you need to add a new application registration in ME-ID that will represent it. To do this:
In the Azure portal, click App registrations in the Azure services section.
Click New registration, and fill in the properties form:
Name: WorkflowGen GraphQL API
Supported account type: Account in this organizational directory only (Default Directory only - Single tenant)
Redirect URI: Leave this blank.
Click Register at the bottom of the page.
You've now successfully registered the WorkflowGen GraphQL API
application in ME-ID.
Click Expose an API.
To the right of Application ID URI, click Set and enter the URI https://<workflowgen url>/graphql
📌 Example: https://mycompany.com/wfgen/graphql
Click Save.
Click Add a scope and enter the following information:
Scope name: default
Who can consent?: Admins and users
Admin consent display name: Default access to the WorkflowGen GraphQL API
Admin consent description: Allows the application to get access to WorkflowGen GraphQL API.
User consent display name: Default access to the WorkflowGen GraphQL API
User consent description: Allows the application to get access to WorkflowGen GraphQL API.
Click Add scope.
You should now have a new scope defined (e.g. https://<workflowgen url>/graphql/default
).
On the WorkflowGen Web app
application registration page, click API permissions.
Click Add a permission, then select the tab My APIs.
Click the WorkflowGen GraphQL API
application in the list.
Click Delegated permissions and check default
under the Permission column.
Click Add permissions.
On the API permissions page, click Grant admin consent for <your tenant name>, then click Yes.
You should now have all of the information you need to configure your WorkflowGen instance to delegate authentication to Microsoft Entra ID Here's a review:
A client ID. This is the application (client) ID of the WorkflowGen Web app
application registration in ME-ID. You can find it on its Overview page.
A client secret. This is the secret previously generated in step 2 for the WorkflowGen Web app
.
An audience. This is the Application ID URI
property (e.g. https://<workflowgen url>/graphql
) in the Expose an API section of the WorkflowGen GraphQL API
application registration.
The metadata endpoint URL. This URL is bound to your ME-ID directory. To find it:
Go to the Overview page and copy the Tenant ID
value.
The metadata endpoint URL is built by replacing <Tenant ID>
with your Tenant ID as follows:
For Microsoft Identity Platform v2.0 (recommended):
For Azure v1:
By now, you should have all the information needed to link your WorkflowGen instance to ME-ID.
Now, you have to configure WorkflowGen to delegate its authentication to ME-ID.
web.config
Open the WorkflowGen web.config
file and add and/or update the following properties under <appSettings>
For Microsoft Identity Platform v2.0 (recommended):
For Azure v1:
✏️ Note: Check session iFrame (e.g. ApplicationSecurityAuthCheckSessionUrl
) is not supported in Microsoft Identity Platform v2.0.
Replace <CLIENT ID>
with the WorkflowGen Web app
application (client) ID from ME-ID.
Replace <CLIENT SECRET>
with the WorkflowGen Web app
application registration's generated secret from ME-ID.
Replace <METADATA URL>
with the metadata endpoint URL that you built earlier from your ME-ID's Tenant ID
value.
For Microsoft Identity Platform v2.0, replace <workflowgen url>
with your WorkflowGen URL in the value of the ApplicationSecurityAuthAdditionalScopes
key (e.g. https://mycompany.com/wfgen/graphql/default
) if you have configured the WorkflowGen GraphQL API
application registration (steps 4 through 6). Otherwise, remove the ApplicationSecurityAuthAdditionalScopes
key completely.
For Azure v1, replace <CHECK SESSION URL>
(which is usually https://login.microsoftonline.com/<Tenant ID>/oauth2/checksession
) with the value of the metadata endpoint's check_session_iframe
property. To do this, you'll have to make an HTTP GET request to your metadata endpoint URL (e.g. https://login.microsoftonline.com/<Tenant ID>/.well-known/openid-configuration
), then copy and paste the value. See the examples below on how to request the metadata endpoint.
Linux/macOS request example:
✏️ Note: Remove | python -m json.tool
if you don't have Python; this is for pretty printing.
Windows PowerShell request example:
Option
Description
ApplicationSecurityAuthProvider
The name of the identity provider supported by WorkflowGen. At this time, there is support only for Microsoft Entra ID, Microsoft Identity Platform v2.0, Auth0, AD FS, and Okta. Value: azure-v1
, ms-identity-v2
,auth0
, adfs
, orokta
ApplicationSecurityAuthClientId
Each identity provider generates a code that uniquely identifies your application. In this case, this is the code that uniquely identifies the WorkflowGen Web app
application in ME-ID.
ApplicationSecurityAuthClientSecret
Like the client ID, this is also generated by the identity provider, but it is more like what a password is for a user. It's important to keep this secret because malicious software that has access to this can act on the behalf of the application. This value must be explicitly generated in ME-ID.
ApplicationSecurityAuthMetadataUrl
ApplicationSecurityAuthAppIdClaim
ApplicationSecurityAuthUsernameClaim
The name of the claim contained in the access token that identifies the user in WorkflowGen. This is used by WorkflowGen to generate a session token as well as by the GraphQL API when receiving an access token. ✏️ Note: It's recommended to keep the default value.
ApplicationSecurityAuthAccessTokenUsernameClaim
This is used by the GraphQL API when receiving an access token.
✏️ Note: It's recommended to keep the default value.
ApplicationSecurityAuthClockTolerance
This value is used when verifying a token in WorkflowGen. It's essentially to deal with minor differences between servers' clocks. ✏️ Note: It's recommended to keep the default value.
ApplicationSecurityAuthSessionRefreshEnableIFrame
When enabled (Y
), this option activates the session auto-refresh feature using an invisible <iframe>
. This allows users to enter their password less often by refreshing their session in the background while they're working.
✏️ Note: This option is only available when using WorkflowGen with OIDC authentication.
WorkflowGen should now be linked to your ME-ID. The last thing left to do is to configure a few more options in order to finish the internal wiring of WorkflowGen so that it can delegate its authentication.
WorkflowGen uses an internal session token to manage the user session and identify the current user for all the HTTP requests made to the web application after the user has logged in to ME-ID. In order to generate a session token, you need to add a few more settings to the web.config
.
Open the WorkflowGen web.config
file and add and/or update the following property under <appSettings>
:
Replace <SECRET>
with a custom value that can't be guessed, such as a UUID or a complex password.
The secret will be only accessible inside your instance of WorkflowGen, so when generating a session token, WorkflowGen will sign it with this secret in order to check the validity of all session tokens passed to it.
You now need to activate the delegation by replacing the authentication system in IIS and pointing WorkflowGen's modules to the correct authentication module.
In IIS Manager, click on the WorkflowGen website in the tree view.
Click the Authentication button.
Enable Anonymous Authentication, and disable all other authentications.
Perform these steps for all sub-applications as well.
web.config
files of sub-applicationsCertain sub-applications need to have their authentication checked by the special Advantys.Security.JWTAuthenticationModule
WorkflowGen authentication module, but certain other sub-applications (such as /wfgen/auth
, /wfgen/hooks
and /wfgen/scim
) should not because they are either public or aren't part of the global authentication system.
Add the following property to the WorkflowGen web.config
file:
If you have developed custom web forms with their own \bin
folders, you have to copy the following .NET assemblies and dependency libraries from \wfgen\bin
to each custom web form's \bin
folder (\wfgen\wfapps\webforms\<custom webform>\bin
):
Advantys.My.dll
Advantys.Security.dll
Newtonsoft.Json.dll
jose-jwt.dll
You should now have a working WorkflowGen instance with the authentication delegated to Microsoft Entra ID through the OpenID Connect protocol. Make sure to have provisioned your users to WorkflowGen in order for them to successfully access WorkflowGen.
By default, the only recipient of the access token is the WorkflowGen GraphQL API
application. This means that the access token can only be used to send queries to the GraphQL API only. In order to use the same access token to call your own APIs from WorkflowGen (e.g. web forms), you will need to perform the following steps in your Azure portal, and then modify the WorkflowGen web.config
file.
In the Azure portal, click App registrations in the Azure services section.
Click New registration, and fill in the properties:
Name: My APIs
Supported account types: Account in this organizational directory only (Default Directory only - Single tenant)
✏️ Note: Depending on the context, you should choose the right option for your use case for the Supported account type value.
Redirect URI: Leave this blank
Click Register at the bottom of the page.
Click Expose an API.
To the right of Application ID URI, click Set and enter the URI api://my-apis
.
Click Save.
Click Add a scope and enter the following information:
Scope name: wfgen-graphql-full-access
Who can consent?: Admins and users
Admin consent display name: Full access to the WorkflowGen GraphQL API
Admin consent description: Allows the application to get access to WorkflowGen GraphQL API.
User consent display name: Full access to the WorkflowGen GraphQL API
User consent description: Allows the application to get access to WorkflowGen GraphQL API.
Click Add scope.
Add any other scopes that seem necessary for your other APIs.
Click Manifest.
Find the appRoles
JSON property and add the following JSON object to the JSON array:
✏️ Note: Replace <NEW ID>
with the value generated by the [guid]::NewGuid().ToString()
PowerShell command or use any GUID generators.
Click Save.
My APIs
applicationOn the WorkflowGen Web app
application registration page, click API permissions.
In the Configured permissions section, click Add a permission.
Click My APIs, then select the My APIs
application in the list.
Click Delegated permissions and check wfgen-graphql-full-access
under the Permission column.
Click Add permissions.
On the API permissions page, click Grant admin consent for <your tenant name>, then click Yes.
My APIs
applicationFor each of your automated applications in Azure (e.g. server-side script, background service, or application) that requires access to the My APIs
application, do the following:
Go to the application's registration page, then click API permissions.
In the Configured permissions section, click Add a permission.
Click My APIs, then select the My APIs
application in the list.
Click Application permissions and check wfgen-graphql-full-access-role
under the Permission column.
Click Add permissions.
On the API permissions page, click Grant admin consent for <your tenant name>, then click Yes.In the WorkflowGen web.config
file:
Open the WorkflowGen web.config
file, add and/or update the following application settings, then save the file:
The WorkflowPage
class in the WorkflowGen.My
library provides a public CurrentUserAccessToken
method to easily retrieve the current user's shared access token that can be used to query the GraphQL API and your third-party APIs. See the snippet code below.
If you don't need WorkflowGen GraphQL API access, you can skip this application registration and configuration in Azure (steps 4 through 6). In this case, continue the configuration procedure from through completely. Finally, follow the configuration in the section.
Since October 2021, the use of a default schema or a verified domain for the AppId URL on a single tenant application (see the Microsoft documentation for more information) is required.
The Microsoft documentation on how to add and verify a custom domain is available .
The endpoint provided by the identity provider that supports the standard. It enables WorkflowGen to get some public information about your ME-ID domain. Without this, you'll have to manually enter much more configuration in the web.config
. Take note that the metadata endpoint URL is different for Microsoft Identity Platform v2.0 and Azure v1.
The name of the claim contained in the access token obtained from the identity provider that uniquely identifies a non-interactive client. This is only used if you have a machine-to-machine application that needs to have access to the GraphQL API. To configure this, see the section. ✏️ Note: It's recommended to keep the default value.
If you skipped the steps earlier, it is required to apply the configuration in the section.
This configuration does have some drawbacks. For example, the mobile application will not be compatible with this setup.