[keycloak-user] Brokering with OIDC and Direct Access Grant
Marek Posolda
mposolda at redhat.com
Thu Jan 26 03:35:36 EST 2017
We don't have brokering for directGrant flow though. You would need to
code authenticator by yourself.
Maybe I would do something like the authenticator where you can send the
parameters like for example
"grant_type=password&client_id=your-client&external_idp=true&external_username=john-from-kc-b&external_password=johnspassword"
You will create new directGrant flow and you will put your authenticator
to it. Your authenticator will then do something like:
- Check if there is "external_idp=true" parameter. If not, then just
passthrough to other authenticators in the chain to do classic
directGrant login against "local" Keycloak server (like default
directGrant flow do)
- Then check the parameters external_username and external_passsword to
login against your Keycloak B (Assuming you know where Keycloak B is and
what is the desired clientId of Keycloak B to authenticate against it)
- If authentication against Keycloak B successful, you will successfully
finish the authenticator, so your client will receive the accessToken
from Keycloak A, which can be used to access your API.
You can take a look at existing Authentication SPI docs and examples and
at the existing implementations of DirectGrant authenticators for the
inspiration (ValidateUsername, ValidatePassword, ValidateOTP)
Marek
On 24/01/17 15:13, Alexander Chriztopher wrote:
> What i need at the end is to be able to call an API protected by
> Keycloak A with a user Known by Keycloak B.
>
> In another way what we want is to do is brokering but with Direct
> Access Grant and not in the browser as it is described here in the
> Keycloak documentation here :
> https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/identity-broker/overview.html.
> What would be the Direct Access Grant flow to achieve the same thing ?
>
> On Tue, Jan 24, 2017 at 12:49 PM, Marek Posolda <mposolda at redhat.com
> <mailto:mposolda at redhat.com>> wrote:
>
> We have support for identity brokering, but not sure if that helps
> with your usecase. As if I understand correctly, you have token
> for B and you want to access API protected by A with the B-token,
> right?
>
> If you don't want to use multitenancy for some reason, I think you
> may have to validate token by yourself and your application side
> instead of using our adapters. As even if A and B use the same
> publicKey for token verification, the issuer in the B-Token will
> be different though, so our adapter (which verifies the issuer)
> will fail.
>
> Also you can implement your own directGrant authenticator in the
> Keycloak-A, which will allow you to authenticate with the b-token
> (sent to it in some parameter) and then return you back the
> a-token, which you can then validate. Defacto exchange b-token for
> a-token. See Authentication SPI docs for more details.
>
> Marek
>
>
> On 24/01/17 12:14, Alexander Chriztopher wrote:
>> Actually, we dont' want our API to know the B instance.
>>
>> Is there any other solution (am thinking about brokering between
>> A and B and creating a client for instance B in instance A etc.) ?
>>
>> And yes, A and B are not in a cluster for organisation matters.
>>
>> On Tue, Jan 24, 2017 at 11:25 AM, Marek Posolda
>> <mposolda at redhat.com <mailto:mposolda at redhat.com>> wrote:
>>
>> I assume that Keycloak instances A and B are not in cluster?
>> If you can put them in cluster, you will have this supported
>> OOTB.
>>
>> Also did you see our multitenancy feature and multi-tenant
>> example? This allows that application (API) is protected by
>> both instance A or B. So based on the token from the request,
>> you will see if you should use keycloak A or B to validate token.
>>
>> Marek
>>
>>
>> On 24/01/17 11:05, Alexander Chriztopher wrote:
>>
>> Hello,
>>
>> Am looking for the flow to get an access token with OIDC
>> and 2 Keycloak
>> instances (A and B).
>>
>> User is Known by instance B and gets an access token from
>> instance B then
>> needs to access an API protected with instance A.
>>
>> What would be the best way to do it ?
>>
>> Thanks for any help.
>> _______________________________________________
>> keycloak-user mailing list
>> keycloak-user at lists.jboss.org
>> <mailto:keycloak-user at lists.jboss.org>
>> https://lists.jboss.org/mailman/listinfo/keycloak-user
>> <https://lists.jboss.org/mailman/listinfo/keycloak-user>
>>
>>
>>
>>
>
>
More information about the keycloak-user
mailing list