-
Notifications
You must be signed in to change notification settings - Fork 45
Description
Hello, we are implementing keycloak at my job, and we decided to use your awesome library.
I have an issue/question.
I created a client called django-client
in keycloak and left all the default configurations as is.
When setting LOCAL_DECODE=True
the JWT authorization fails because the keycloak sends aud=['account']
however,
you have
if audience is None:
audience = self.client_id # "django-client" in my case
....
payload = jwt.decode(token, key=key, algorithms=['RS256'], audience=audience, options=options)
This results in an error because the django-client
is not in the intended aud
coming from keycloak
I was able to add a custom Dedicated Scope
to my Client
with the same name (django-client
), following the answers here. making aud=['account', 'django-client']
which makes it pass the JWT check.
but I think this is not a real solution.
from my research all created Clients
have aud='account'
by default from here
and you can remove this aud
if you want and assign custom scopes instead.
I think that using audience = self.client_id
by default is not correct here.
if audience is None:
audience = self.client_id
- It should be either skipped if None
if audience is None:
audience = None
- OR should use
"account"
`aud` should be either skipped if None
```python
if audience is None:
audience = 'account'
- OR we can add
LOCAL_DECODE_AUD
in the config that should indicate that the developer wants to enforce a specificaud
, which could be anything"account", CLIENT_ID, "www.supersecretwebapp.com", etc..
I am not sure if my issue is very coherent and up to code. please reach out if you need more info about this.
P.S. A useful resource about JWT aud
vs client-id
here