IdentityPython / oidc-op

An implementation of an OIDC Provider (OP)
Apache License 2.0
64 stars 26 forks source link

Exception when refreshing a token after grant has expired #202

Open melanger opened 2 years ago

melanger commented 2 years ago

When trying to use a refresh token after grant (the session) expires, there is an unclear error: NoneType object has no attribute expires_at

This is because here, the access_token.expires_at property is accessed: https://github.com/IdentityPython/oidc-op/blob/2f81e246ff9ef412f5dc786cd2cfa5dd5fccf9e1/src/oidcop/oauth2/token.py#L279

where access_token is a result of grant.mint_token, which may return None: https://github.com/IdentityPython/oidc-op/blob/8de3acf28be2777480c4398c443f698def9c9724/src/oidcop/session/grant.py#L261

And it returns None whenever the grant/token is not active: https://github.com/IdentityPython/oidc-op/blob/8de3acf28be2777480c4398c443f698def9c9724/src/oidcop/session/grant.py#L274

Which happens when the grant expires (e.g. I set the grant expiration to 12 hours and I try to use a refresh token on the token endpoint after 13 hours).

This causes an exception, which for example in satosa-oidcop is handled by a general error response "request cannot be processed", which does not say much.

I guess I should set grant expiration to be longer than any token expiration (e.g. refresh token expiration) in the config, but this exception may still be addressed to provide better error message.