Commons Project
One of the great features of the OpenAMv13 and OpenIDMv4 releases is actually not a feature of those products at all. I'm talking about the Self-Service capability which is actually part of the 'COMMONS' project at ForgeRock. As the name suggests, the functionality on 'Commons' may be found in more than one of the final products. Commons includes capabilities such as audit logging, the CREST framework, the UI framework, as well as the User Self-Service functionality.Self-Service Configuration
Now there is lots of good documentation about how to make use of the User Self-Service functionality as exposed through the OpenAM and OpenIDM products.For example, for OpenAM: https://backstage.forgerock.com/#!/docs/openam/13/admin-guide#chap-usr-selfservices, and for OpenIDM: https://backstage.forgerock.com/#!/docs/openidm/4/integrators-guide#ui-configuring.
Whilst the end-user functionality is the same, the way you configure the functionality in OpenAM and OpenIDM is slightly different. This is the OpenIDM configuration view:
One thing you might notice from the documentation is that the User Self-Service flows (Registration, Forgotten Password, and Forgotten Username) have the ability to use custom 'plugins' - sometimes called 'stages'. However, another thing you might notice is a distinct lack of documentation on how to go about creating such a plugin/stage and adding it to your configuration.
Note that there is an outstanding JIRA logged for ForgeRock to provide documentation (https://bugster.forgerock.org/jira/browse/OPENIDM-5630) but, in the meantime, this post attempts to serve as an interim. But, I'm only going to use OpenIDM as the target here, not OpenAM.
Fortunately, the JIRA linked above highlights that within the code base there already exists the code for a custom module, and a sample configuration. So, in this post I'll explain the steps required to build, deploy, and configure that pre-existing sample.
The easiest way to do this is to get the code of the Standalone Self-Service application!
Get the Standalone Self-Service code
(*** EDIT : the code referenced below is now available in the forgerock-selfservice-public repo of the LEGACYCOMMONS project: https://stash.forgerock.org/projects/LEGACYCOMMONS/repos/forgerock-selfservice-public/browse ***)
(You may need to register, but go ahead, it's free!)
If you're following the instructions in this post, and are targeting OpenIDMv4 (as opposed to any later releases) then you'll specifically want v1.0.3 of this SelfService repository.
i.e
https://stash.forgerock.org/projects/COMMONS/repos/forgerock-selfservice/browse?at=refs%2Ftags%2F1.0.3
Now download the code to your local drive so we can build it.
Compile and run it
You can see that the 'readme.txt' provides the details of how to compile this project. Note that this will compile the full 'Commons Self-Service' functionality, including the custom stage, in a standalone harness.Once it's built you can browse to the web site and play with the functionality. Any users registered are held in memory of this harness, and therefore flushed each time you stop the jetty container.
So, once you have an accessible SMTP service, you might now need to change the email service config of the User Self-Service functionality. You find this for the test harness - assuming the mvn build has worked successfully - here:
forgerock-selfservice-example/target/classes/config.json
If you're running FakeSMTP on port 2525, then this might look like:
{
"mailserver": {
"host": "localhost",
"port": "2525"
}
}
Now when you run the example webapp emails will be delivered to FakeSMTP (and will ignore whatever you use for username and password)
So, go ahead, register a user. The first thing you should see is a "Math Problem" stage. Eh? What? Where did that come from? Well, that's the custom stage!! Yes, this standalone version of Self-Service includes the custom stage!
Step1. Math Problem |
Step 2. Email Verification |
Email link |
Step 3. Register details |
Step 4. KBA |
Success! |
Inspect the configuration
Now, if we take a look at the 'Registration Stage' configuration for this example app, which we can find here:forgerock-selfservice-example/target/classes/registration.json
we will see it begins like this:
{
"stageConfigs": [
{
"class" : "org.forgerock.selfservice.custom.MathProblemStageConfig",
"leftValue" : 12,
"rightValue" : 4
},
{
"name" : "emailValidation",
"emailServiceUrl": "/email",
"from": "info@admin.org",
...
Brilliant! That first item in the stageConfigs array is the "Math Problem" with it's configuration (i.e. which two numbers to sum!) The remaining array items reference 'name' which are the native/in-built modules and their necessary configuration.
So, what we've achieved so far is:
- Compiled the custom stage (Math Problem)
- Compiled standalone version of Common User Self-Service
- Tested a Registration flow that includes the custom stage, along with some native stages.
And what's left to do?
- Deploy and configure the custom stage in OpenIDM
OpenIDM Deployment
Simply copy the custom stage JAR file to the 'bundle' directory of your OpenIDM deployment
e.g.
cp forgerock-selfservice-custom-stage/target/forgerock-selfservice-custom-stage-1.0.3.jar <openidm>/bundle
And update the 'selfservice-registration.json' file in your 'conf' folder.
This is OpenIDM's name for the 'registration.json' file of the standalone SelfService app, so use the same configuration snippet you saw in the standalone app.
It seems that this method will not allow you to see the custom stage in the Admin UI for OpenIDM. Happily, changes made within the Admin UI do not remove the custom stage from the file. However, be warned that if you disable, then re-enable SelfService Registration there is no guarantee that custom stage will be added into the re-created 'selfservice-registration.json' file in the correct place.
So, with User Self Registration enabled, and the custom stage included in the config, when a user tries to register they will be prompted for the calculation at the appropriate point in the flow.
Custom Stage in OpenIDM flow! |
Exercise for the Reader!
As you can see I have use the pre-supplied custom stage. Showing one approach to building, deploying and configuring it. If you need a custom stage to do something different, then you'll have to investigate the interfaces that need implementing in order to develop a custom stage.
Interesting. Thanks
ReplyDeleteJust created my own custom stage and put the jar in the bundle directory, after restart it fails to start the selfservice as it is unable to locate the class which I just created and put in the selfservice-reset.json (running in the selfservice-example works just fine). Any clue to why it fails?
ReplyDeleteok probably because of these messages (org.forgerock.json,version=[3.0,4) -- Cannot be resolved) which are visible in Felix console. OpenIDM 4.5 uses other version (20.1.0) ...
ReplyDeleteDid you solve this? How?
DeleteDoes OpenIDM has any API exposed for user self-service?
ReplyDelete
ReplyDeleteThank you for sharing such a great information.Its really nice and informative.hope more posts from you. I also want to share some information recently i have gone through and i had find the one of the best mulesoft videos
merhabalar;
ReplyDeleteSohbet
istanbul sohbet
ankara sohbet
almanya sohbet
eskişehir sohbet
konya sohbet
kayseri sohbet
adana sohbet
kürtçe sohbet
Thanks for sharing wonderful information…Agro Fertilizer Company in India
ReplyDeleteperde modelleri
ReplyDeletesms onay
mobil ödeme bozdurma
nft nasıl alınır
ankara evden eve nakliyat
trafik sigortası
Dedektör
web sitesi kurma
ask romanlari
maltepe alarko carrier klima servisi
ReplyDeletekadıköy alarko carrier klima servisi
maltepe daikin klima servisi
kadıköy daikin klima servisi
ümraniye beko klima servisi
beykoz lg klima servisi
üsküdar lg klima servisi
beykoz alarko carrier klima servisi
tuzla arçelik klima servisi