Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove unused userinfo and online token validation #3239

Merged

Conversation

npalaska
Copy link
Member

@npalaska npalaska commented Feb 8, 2023

  • Removes the get_userinfo functionality from the auth module
  • Removes the online token validation capability from the server
  • OIDC token validation will only happen locally

PBENCH-1074

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
@npalaska npalaska self-assigned this Feb 8, 2023
@npalaska npalaska added Server Users Of and relating to working with users. labels Feb 8, 2023
@npalaska npalaska added this to the v0.72 milestone Feb 8, 2023
webbnh
webbnh previously approved these changes Feb 8, 2023
Copy link
Member

@webbnh webbnh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks OK to me, but I have one comment/request.

Comment on lines 195 to +204
try:
token_payload = oidc_client.token_introspect_offline(token=auth_token)
token_payload = oidc_client.token_introspect(token=auth_token)
except OpenIDTokenInvalid:
token_payload = None
except Exception:
current_app.logger.exception(
"Unexpected exception occurred while verifying the auth token {}",
auth_token,
)

# Offline token verification resulted in some unexpected error,
# perform the online token verification.

# Note: Online verification should NOT be performed frequently, and it
# is only allowed for non-public clients.
try:
token_payload = oidc_client.token_introspect_online(token=auth_token)
except OpenIDClientError as exc:
current_app.logger.debug(
"Can not perform OIDC online token verification, '{}'", exc
)
token_payload = None

token_payload = None
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Arguably, this is beyond the scope of this PR, but I'll make the comment anyway, in case you're interested.

Since we (now) have the same response, other than the logger call, regardless of what exception we receive, there's not much reason to have two separate except clauses here.

Moreover, the fact that there was an unexpected exception should probably not be noted here (we're in the "middle" of the call stack).

So, it strikes me that lines 197-204 should be slimmed down to just:

    except Exception:
        token_payload = None

And the catch-all with the logger call should be moved to the end of token_introspect().

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the initial intention was that we didn't want to log for these valid jwt exceptions jwt.ExpiredSignatureError, jwt.InvalidSignatureError, jwt.InvalidAudienceError. These exceptions mean that the token decode was invalid and realistically we will get a lot of tokens that are invalid because of these 3. If we encounter any of these exceptions then we will raise OpenIDTokenInvalid error and move on.

However, if some other exception happened other than these 3 then that means something with our decode has actually failed (not invalid) so we catch that with a generic exception and log the message and move on.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed: we want to log if we or something on which we depend (like Keycloak itself) does something "wrong" or "unexpected", but we don't want to complain every time a client (or "would-be client") does something wrong, because that'll flood the logs and serve no real purpose.

And for authentication failures, we probably don't ever want to return more information to the caller than just "unauthorized".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@npalaska, I agree; however, the catch-generic-log-and-move-on should be done in token_introspect() and not here in verify_auth_oidc().

Comment on lines 195 to +204
try:
token_payload = oidc_client.token_introspect_offline(token=auth_token)
token_payload = oidc_client.token_introspect(token=auth_token)
except OpenIDTokenInvalid:
token_payload = None
except Exception:
current_app.logger.exception(
"Unexpected exception occurred while verifying the auth token {}",
auth_token,
)

# Offline token verification resulted in some unexpected error,
# perform the online token verification.

# Note: Online verification should NOT be performed frequently, and it
# is only allowed for non-public clients.
try:
token_payload = oidc_client.token_introspect_online(token=auth_token)
except OpenIDClientError as exc:
current_app.logger.debug(
"Can not perform OIDC online token verification, '{}'", exc
)
token_payload = None

token_payload = None
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed: we want to log if we or something on which we depend (like Keycloak itself) does something "wrong" or "unexpected", but we don't want to complain every time a client (or "would-be client") does something wrong, because that'll flood the logs and serve no real purpose.

And for authentication failures, we probably don't ever want to return more information to the caller than just "unauthorized".

Copy link
Member

@webbnh webbnh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is GTG...unless I can convince you to make the change I suggested above.

@npalaska
Copy link
Member Author

npalaska commented Feb 9, 2023

This is GTG...unless I can convince you to make the change I suggested above.

I will refactor that in the functional test PR.

@npalaska npalaska changed the base branch from main to openid-connect February 9, 2023 18:43
@npalaska npalaska merged commit e61603e into distributed-system-analysis:openid-connect Feb 9, 2023
npalaska added a commit to npalaska/pbench that referenced this pull request Mar 9, 2023
…m-analysis#3239)

* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
npalaska added a commit that referenced this pull request Mar 13, 2023
* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
npalaska added a commit to npalaska/pbench that referenced this pull request Mar 27, 2023
…m-analysis#3239)

* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
npalaska added a commit to npalaska/pbench that referenced this pull request Mar 27, 2023
…m-analysis#3239)

* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
npalaska added a commit to npalaska/pbench that referenced this pull request Mar 28, 2023
…m-analysis#3239)

* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
npalaska added a commit to npalaska/pbench that referenced this pull request Mar 30, 2023
…m-analysis#3239)

* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
npalaska added a commit to npalaska/pbench that referenced this pull request Mar 31, 2023
…m-analysis#3239)

* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
npalaska added a commit that referenced this pull request Mar 31, 2023
* Remove unused userinfo and online token validation

- Removes the get_userinfo functionality from the auth module
- Removes the online token validation capability from the server
- OIDC token validation will only happen locally

PBENCH-1074
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Server Users Of and relating to working with users.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants