Sometime it may be possible you want to add more parameters to standard registration page of keyloak for your users and aaccess that data in your spring boot application. This artical will show step by steps on how to add such extra attributes.
What is KeycloakKeycloak is an open source software product to allow single sign-on with Identity Management and Access Management aimed at modern applications and services, to learn more visit https://www.keycloak.org/
What is Spring bootSpring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". To learn more visit https://spring.io/projects/spring-boot
To add an extra attribute in keyclkoak server you will need to edit actuall html template and then registaer new attribute in json response so that it will be available on client.
Edit HTML template
Lets assume we want to add mobile number on default registration page.
- Go to Keycloak home installation directory
- edit file theme/base/login/register.ftl
- add following html in this file wherever you want to see mobile number field on the above screen.
- Note down id="user.attributes.mobile" for input tag, this is the field name for custom attribute which will be saved with user data
Edit Settings in KeyCloak Admin PanelNow we need to map this field to rest service ourput, so that each client can access it.
- Login to your KeyCloak admin panel
- Select Your realm which you may have created already
- Select Client which you may have created already from left side menu
- Select Mapper tab
- Click on create button on right
- Enter Name as "Mobile Attirbute Mapping" (basically any name which you want to)
- Select Mapper Type as "User Attribute"
- Add User Attribute as "mobile" , which is from html input tag id "user.attributes.mobile"
- Add Token Claim name as "mobile" or any other valid Json name field value, which you will read as json element in Spring boot application.
- Select Claim Json Type as "String"
- Click Save
Read Custom user attribute in Java/Spring boot
Say you have a controller like this
Note line 13 , we are reading "mobile" from map , which is same as "Token Claim" set in mapper definition.