diff --git a/example/flask_rp/views.py b/example/flask_rp/views.py index e035b28..15abf2d 100644 --- a/example/flask_rp/views.py +++ b/example/flask_rp/views.py @@ -233,7 +233,7 @@ def logout(): def backchannel_logout(op_hash): _rp = get_rp(op_hash) try: - _state = rp_handler.backchannel_logout(request.data, _rp) + _state = rp_handler.backchannel_logout(_rp, request.data) except Exception as err: logger.error('Exception: {}'.format(err)) return 'System error!', 400 diff --git a/src/oidcrp/rp_handler.py b/src/oidcrp/rp_handler.py index 27275bd..5dc6750 100644 --- a/src/oidcrp/rp_handler.py +++ b/src/oidcrp/rp_handler.py @@ -866,7 +866,6 @@ def backchannel_logout(client, request='', request_args=None): :param request: URL encoded logout request :return: """ - if request: req = BackChannelLogoutRequest().from_urlencoded(as_unicode(request)) else: @@ -887,17 +886,15 @@ def backchannel_logout(client, request='', request_args=None): raise MessageException('Bogus logout request: {}'.format(err)) # Find the subject through 'sid' or 'sub' - - try: - sub = req[verified_claim_name('logout_token')]['sub'] - except KeyError: - try: - sid = req[verified_claim_name('logout_token')]['sid'] - except KeyError: - raise MessageException('Neither "sid" nor "sub"') - else: - _state = _context.state.get_state_by_sid(sid) - else: + sub = req[verified_claim_name('logout_token')].get('sub') + sid = None + if not sub: + sid = req[verified_claim_name('logout_token')].get('sid') + + if not sub and not sid: + raise MessageException('Neither "sid" nor "sub"') + elif sub: _state = _context.state.get_state_by_sub(sub) - + elif sid: + _state = _context.state.get_state_by_sid(sid) return _state