Configure K2 SmartForms for AAD Authentication

Posted by Mikhail Rodionov on October 19, 2017
No ratings yet.

In my previous article –  Azure AD instance set up basic walkthrough, I covered the process of setting up of an Azure Active Directory (AAD) instance and also such basic things as subsequent AAD user creation, joining Windows 10 device to AAD and configuring logon to Windows 10 device using AAD account.

In this blog post, I decided to put this AAD instance to more serious/interesting use and configure K2 SmartForms for AAD authentication. When configured, such AAD integration allows AAD users to log in to K2 SmartForms web sites (Runtime, Designer, Management) and enables K2 to use AAD users as destination users in workflows’ client events or pull users details via Azure Active Directory Service broker and respective SmartObjects.

When you use SharePoint Online with K2 you get your AAD authentication configured automagically (see, for example, this blogpost which runs through the steps involved), and it really means that once you activated K2 App on your SharePoint online site – things get configured automatically on the K2 side. The simplicity of this integration emphasizes current product focus on clients which use SharePoint Online in their environments.

Things are a little bit different when you do not have (or do not want to use) SharePoint Online in your environment, but still need AAD users to interact with K2. Good news – this is something you can do, bad news – current K2 documentation has not been updated to reflect AAD side UI and terminology changes and all in all it is quite lengthy manual configuration process. So vendor documentation is in place and you may follow it along but like I said current edition needs to be updated a bit, but no worries we will cover everything here, simplifying (when possible) steps involved and using modern Azure Portal UI.

This article assumes that you have K2 4.7 installed and configured in your environment with on-premise AD or K2 SQL authentication and now just want to add AAD integration.

Beyond installed and configured K2 blackpearl and K2 SmarForms our prerequisites are AAD subscription (this has been covered in my previous article) and SSL configuration of K2 web sites (as usual for test purposes you can get away with self-signed certificate, and this is also covered in K2 Installation and Configuration Guide).

There are two big parts in setting up K2 and AAD integration: registering K2 SmartForms app in AAD and K2 side configuration of OAuth Resource and AAD label.

Let’s start with registering K2 SmartForms app in AAD. In the real world, you may not have access to AAD and somebody else will have to perform these steps for you. But, in any case, once app registered you will need certain values from registered K2 app which used to perform K2 side configuration. For the sake of convenience, those will be written IN BOLD CAPITAL LETTERS and I suggest you create some table or text document which you can fill in as you go through AAD app set up part and then use it while performing K2 side configuration.

Our first step is to log on to, select AAD domain and click on App registrations link under Manage:

Microsoft Azure - Azure Active Directory - App registration

It will open App Registrations page where you need to click on “New application registration” button:

Microsoft Azure - Azure Active Directory - App registration - New application registration

This button starts to Create app wizard where you are filling in the application name, leaving application type on its default value of “Web app / API” and specifying Sign-on URL as shown below:

Microsoft Azure - Azure Active Directory - Create app Wizard

Once app has been created you can see it in the list of your apps:

Microsoft Azure - Azure Active Directory - App registration - List of Apps

If you click on it you can see your newly created app properties page:

Microsoft Azure - Azure Active Directory - App registration - K2 smartforms Multi-Auth App - Settings

We now can further configure app and take a note of details we will later need to use on K2 side, for now from the Settings page copy and save your APPLICATION ID value. For additional properties and settings, use Settings pane on the right. For example, we can add customized logo for our app as shown below (that comes in handy if your list of registered apps is large, as logo helps you to find your app somewhat quicker in App Registrations list):

Microsoft Azure - Azure Active Directory - App registration - K2 smartforms Multi-Auth App - Settings - Properties

While we still have app properties blade open we can adjust App ID URI replacing GUID which goes after K2 site part of URL and changing it to something less lengthy and easier to read for human. In my case I’ve changed it to “/identity/” (as you can see on the screenshot above). NOTE: This App ID URI must be unique within your AAD instance (UI won’t allow you to enter duplicate). Also on this page be sure to set Multi-tenanted option to Yes.

Once again be sure to save APPLICATION ID into your app info table, and then click on Keys under API ACCESS section:

Microsoft Azure - Azure Active Directory - App registration - K2 smartforms Multi-Auth App - Settings - Keys

There you need to type in description and select expiration time for the key, and click on Save to retrieve the key value:

Keys - Description - Expires - Value

Once you click on Save, copy and save the key into table. Important warning: You will not be able to retrieve the key value once you leave this page so make sure you have it stored/copied:

Keys - Important Warning

Once you copied and saved the KEY VALUE to table you can navigate away from this blade. As you can see on the screenshot above Azure UI additionally warns you that you will not be able to retrieve the key value once you leave this blade so make sure you that you saved it.

If you navigate away from this blade and return to it you will see that key value is hidden and there is no options to retrieve it:

Microsoft Azure - Azure Active Directory - App registration - K2 smartforms Multi-Auth App - Settings - Keys - Options

Now from the app properties page click on Settings, then on Reply URLs and add two additional reply URLs (make sure to adjust {YourK2Server} value as necessary, in my case K2 server name was “”, for example). So https://{YourK2Server}/runtime should be already here and you need to add the following:

Token Endpoint Reply URL – https://{YourK2Server}/identity/token/oauth/2

Authorization Endpoint Reply URL – https://{YourK2Server}/identity/authorize/oauth/2

After this your Reply URLs list should look as on the screenshot below, and you can click on Save:

Microsoft Azure - Azure Active Directory - App registration - K2 smartforms Multi-Auth App - Settings - Reply URLs

Let’s also make sure that we have required app permissions. For that we need to navigate to Required permissions and then add/edit Windows Azure Active Directory permissions:

Microsoft Azure - Azure Active Directory - App registration - K2 smartforms Multi-Auth App - Settings - Required permissions

Here we need either grant (Add button) or make sure (click on “Windows Azure Active Directory” permissions entry) and ensure that the following permissions are granted for K2 app:

Enable Access - Windows Azure Active Directory

As a final touch we need to configure our AAD App to allow us to log in to all our K2 sites by modifying the app manifest file. Click on edit app manifest button:

K2 smartforms Multi-Auth App - Manifest file

Within manifest file locate “identifierUris” section and append it so that it lists all your K2 sites, as shown in the screenshot below:

K2 smartforms Multi-Auth App - Manifest file - Edit manifest

Now we need to click on Endpoints button from the App registrations blade list:

Microsoft Azure - Azure Active Directory - App registration - Endpoints

It will open Endpoints information page, from which you need to copy and save the following items: Federation Metadata Document URL, the OAuth 2.0 Token Endpoint, and the OAuth 2.0 Authorization Endpoint URL (the GUID section of all these URLs is your Directory ID).

Federation Metadata Document - OAuth 2.0 Token Endpoint - OAuth 2.0 Authorization Endpoint

After saving endpoints information we need to obtain and store the Certificate Thumbprint. For that, we need to navigate to Federation Metadata Document URL of our AAD using web browser and once XML is loaded search for X509Certificate value (within the Signing container) and copy it:

X509Certificate value

You just copy entire line between <X509Certificate> and </X509Certificate> tags. Next Open a browser and browse to the online SAML fingerprint tool, paste the copied X509Certificate value into the form and make sure the sha1 algorithm is selected, then click the Calculate Fingerprint:

Onelogin - Fingerprint

Save FINGERPRINT VALUE. This concludes AAD app configuration part. After completing it you supposed to have this data:

  • APPLICATION ID. Referred as Client ID in old Azure UI/K2 documentation. You can get it from app properties blade in AAD. Used as Authorization, Token and Refresh value of client_id OAuth resource property in K2.
  • KEY. The key value which must be copied from the App Keys page at the stage of key creation. Used in all values of client_secret OAuth resource property in K2.
  • METADATA URL. Can be copied from App Registrations > Endpoints page.
  • OAUTH AUTHORIZATION ENDPOINT. Can be copied from App Registration > Endpoints page. Used when adding New OAuth Resource in K2.
  • TOKEN ISSUER ENDPOINT. Can be copied from App Registration > Endpoints page. Used when adding New OAuth Resource in K2.
  • DIRECTORY ID. GUID part which can be found in abovementioned endpoint URLs, or in Azure Active Directory Properties. Used as token value of resource_id OAuth resource property in K2.
  • FINGERPRINT VALUE. Can be generated with SAML fingerprint tool from <X509Certificate> value of your app federation metadata document.

Now we are done with AAD side app switch over to K2 Management site. As our first step here, we need to Register an OAuth Resource in K2. To do that we navigate to Authentication > OAuth > Resources and click on New button:

K2 Management site - Resources

This will open New OAuth Resource window where you need to type in resource name, select Microsoft Online as a resource type and enter Authorization and Token Endpoint values we recorded during AAD app registration. We leave Use Host Server Authorization Endpoint checkbox unchecked and click on OK button (see screenshot below).

K2 Management site - Resources - New OAuth Resource

Our next step is to edit client_id resource parameter, which you can select from the list of Resource Parameters and then click Edit as shown below:

K2 Management site - Resources - Edit

Once client_id edit dialog has been opened we just need to paste APPLICATION ID we saved during AAD app registration in all three fields of this box, i.e. we use it as a value for Authorization, Token, and Refresh:

K2 Management site - Resources - Edit OAuth Resource Value - Client ID

We next need to edit a number of other parameters in the same fashion. We edit api_version resource parameter entering “1.0” for all values:

K2 Management site - Resources - Edit OAuth Resource Value - API version

Next, we edit scope resource parameter entering reader as Authorization Value as shown below:

K2 Management site - Resources - Edit OAuth Resource Value - Scope

For all values of client_secret enter KEY we saved during AAD app registration:

K2 Management site - Resources - Edit OAuth Resource Value - Client Secret

We specify for all values of resource parameter:

K2 Management site - Resources - Edit OAuth Resource Value - Resource

For redirect_uri we enter https://{YourK2Server}/identity/token/oauth/2 as Authorization and Token value:

K2 Management site - Resources - Edit OAuth Resource Value - Redirect URL

For entity_id parameter we entering DIRECTORY ID of your AAD instance as a Token value:

K2 Management site - Resources - Edit OAuth Resource Value - Entity ID

After all these edits you Resource Parameters for AAD resource should look like this:

K2 Management site - Resources - Edit OAuth Resource Value - Resource Parameters

We now ready to add AAD security label in K2 (you can use something other than “AAD” as label name). For this, we need to execute this SQL script or use sample script from K2 Installation and Configuration guide adjusting values for @OAuthProviderName and @SecurityLabelName variables. Be sure to back up your K2 database as you supposed to do before any direct modification of K2 database (I hope this is already your habit? If not try to form it ???).

Once script has been executed, we need to restart K2 service to get this new label initialized/picked up by K2.

Our next step is to add new claim issuer from K2 Management site, as shown below:

K2 Management site - Issuers - New - Edit Claim Issuer

You need to specify the following values there:

For Issuer value you specify{DIRECTORY_ID}/, for URI value you specify{DIRECTORY_ID}/wsfed. As a Thumbprint value, you need to paste your FINGERPRINT VALUE. Pay attention to trailing slash in Issuer URL – do not omit it.

Next step is configuration of the Claim Mappings in K2. Claim mappings are used to identify the incoming claims and map them to the appropriate K2 security label. To do that we navigate to Claims, click New, select label and issuer we created earlier and fill in the form as shown in the screenshot below. We need to type in User and Group token identifiers and fill in all values under Identity Provider along with Original Issuer and Claim Type values under Identity section (see screenshot below).

K2 Management site - Claims - New - Edit Claim Type Mapping

Now we need to configure the Realms and Audience URIs linking them with new issuer. For that, we navigate to K2 Management > Authentication > Claims > Realms and for each and every realm enable our AAD issuer, by means of selecting realm entry, clicking Edit and checking newly created issuer in Linked Issuers list:

K2 Management site - Realms - Edit - Edit Realm

Hooray! We can now navigate to our SmartForms URL and select our AAD and log on with AAD credentials:

K2 RUNTIME - Login method

Once label is selected you are redirected to Microsoft login page ( where you need to type in your AAD credentials and click Sign in:

K2 smartforms Multi-Auth App

What you going to see next obviously depends on which K2 site you were trying to access. If it was K2 Designer then it will be opened without further questions in the default configuration:

K2 Designer - Welcomes Window

But in case you try to open K2 Management you are going to get insufficient permissions message:

Management alert window

Which nudges us to perform our final configuration step. As we don’t have K2 Management rights we need to go and grant them, right? But as soon as you attempt to do it you will see that at this stage you are unable to do it:

K2 Management site - Server Rights - Add Users and Groups - Error

Error message tells us that OAuth token requires authorization and comes from K2 URM Service. It means that we need to obtain OAuth token for K2 service account (URM Service runs in the context of this account). To do that perform the following steps:

1) Run SmartObject Services Tester (“C:\Program Files (x86)\K2 blackpearl\Bin\SmartObject Service Tester.exe”) in the context of your K2 service account using standard Windows “Run as different user” option.

2) Now the tricky part. Unfortunately, now, in K2 4.7 SmartObject Services Tester only allows you to perform authorization redirect only when you are creating new instance (this possibly will be addressed in upcoming K2 Five release). Thus, to get our K2 Service account token instead of touching URMService we will simply register new Azure Active Directory service instance (and you may want to have it anyway):

SmartObjects - Services - Tester - AAD - Register ServiceInstance

In Add Service Instance dialog we just switching Authentication Mode to OAuth, selecting our OAuth Resource (“AAD”) and typing as OAuth Resource Audience value. We do not touch any other settings leaving them on default values as illustrated below.

SmartObjects - Services - Add Service Instance

Once you click on Next, you will get this message (once again this message appears only when you are adding new instance, not editing existing one!):

OAuth Error window

Once you hit OK browser window will be opened where you need to type in your AAD credentials. Important: you need an AAD user with Global administrator directory role for this action, otherwise you are going to see the following error:

K2 smartforms Multi-Auth App - notification window

If you remember one of the rights we granted to our app is “Read directory data” and as it is a directory-wide access only global admin AAD user can grant consent to this right:

Azure Active Directory - Delegated Permissions

Once you type in your AAD global admin user credentials you just need to confirm that we are granting permissions mentioned above to the app:

K2 smartforms Multi-Auth App - confirmation permission

Once you click on accept you should be redirected to your K2 Identity site (you may get Windows credentials prompt at this stage – type in your K2 service account credentials) and see “Authorization Successful” message:

K2 Identity site - Authorization Successful

This means that K2 service account token has been created and cached on your K2 server and you can see it in K2 Management > Authentication > OAuth > Tokens:

K2 Management site - Tokens - Stored Tokens

3) You can now get back to SmartObject Services Tester and click on Next, Add to finish creation of AAD Service Instance:

SmartObject - Services - Tester - Add Service Instance

We now completed all the configuration steps and can grant rights to AAD users and use them in all K2 user pickers:

Server Rights - Add Users and Groups

It is good time to switch over to our Windows10 machine where we enabled AAD log on (see my previous blogpost) and look how it works there.

First, we can conveniently see our K2 app in Access Panel application in our web browser. Just open in your browser and without any credentials prompts (remember we have logged on to Windows 10 device with AAD credentials) you can see this:

Access Panel Application - Microsoft - Apps - K2 smartforms Multi-Auth App

At this point, I had realized that I have published K2 runtime site here, which is of little use as entry point for users, but you can correct this and publish either K2 Designer or K2 Management here. But in any case, from this Windows 10 machine, we can navigate to K2 Management or Designer sites after just selecting AAD label and without typing in any credentials.

I should say that the way this integration looks now in K2 4.7 is a bit inconvenient and lengthy. There are a lot of manual steps where you can easily make small mistakes which prevent your entire set up from working correctly, but with some experience, you can do it. I think we have these manual configuration steps just because there was much more focus on SharePoint online AAD integration from K2 side and little attention to AAD without SharePoint online integration scenario. But in case a lot of clients will be asking vendor to simplify and better support this AAD only integration scenario, this can be improved and simplified in response to that.

In any case, I think this article gives a very good example of using AAD as an authorization provider for K2. I hope it was informative and useful and in case you have any questions you may leave them in the comments section below.


Related materials:

Views All Time
Views Today
Return to all posts

Microsoft is Announcing Azure File Share Snapshots in Public Preview
Create Custom Fields in OMS

Please rate this

The following two tabs change content below.

3 Responses to “Configure K2 SmartForms for AAD Authentication”

  1. […] post “Configure K2 SmartForms for AAD Authentication” has been just recently published on AcloudA Blog. But in addition to that I’ve already […]

  2. […] unable to log on to K2 using AAD credentials (AAD integration configured without SharePoint online as described here) and receiving the following […]

  3. […] I have mentioned in my previous article that setting up an integration between K2 blackpearl and SharePoint online is rather “a piece […]

Leave a Reply

You must be logged in to post a comment.