Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Login to Keycloak using API

I have 2 different applications: say Application1 and Application2.

  1. I have integrated Application2 with keycloak and I am able to login to this application using Keycloak's login page.

  2. Now what I want is, if I login to my Application1 (without keycloak), I should be able to call some API of keycloak to login to application2 (without rendering keycloak's login page).

It is feasible? If yes, how?

Any help will be highly appreciated.

Thanks

like image 575
Akhil Prajapati Avatar asked Jan 12 '18 06:01

Akhil Prajapati


People also ask

How do I log into a Keycloak?

Open browser and enter the keycloak url. Click on Administration Console. Default username and password is 'admin' , 'admin'.

How do I authorize API with Keycloak?

The first step to enable Keycloak Authorization Services is to create the client application that you want to turn into a resource server. Click Clients. On this page, click Create client. Type the Client ID of the client.

How do you use an authentication Keycloak?

Configure Keycloak to authenticate your cbioportal instance. Log in to your Keycloak Identity Provider, e.g. http://localhost:8080/auth, as an admin user. ⚠️ when setting this up on something else than localhost (e.g. production), you will need to use/enable https on your Keycloak server.


1 Answers

You are effectively asking your users to trust that Application1 will manage their keycloak credentials securely. This is not recommended because

  1. better security is achieved if the user is redirected to keycloak to enter their credentials. In an ideal world no client application should be handling or have access to user credentials.
  2. It defeats the purpose of single sign in where a user should only need to enter their credentials for the first application they need to access (provided their session has not expired)

But if you control and can trust Application1 and need to do this due to legacy or other reasons then you can enable the Resource Owner Credentials Flow called "Direct Access" on the Keycloak Client Definition, and then POST the user's credentials as a form-urlencoded data type to

https://<keycloak-url>/auth/realms/<realm>/protocol/openid-connect/token 

The paramaters will be

grant_type=password client_id=<Application1's client id> client_secret=<the client secret> username=<the username> password=<the password> scope=<space delimited list of scope requests> 

The response will be a valid JWT object or a 4xx error if the credentials are invalid.

like image 125
shonky linux user Avatar answered Oct 21 '22 02:10

shonky linux user