diff --git a/keystonemiddleware/auth_token/__init__.py b/keystonemiddleware/auth_token/__init__.py index 89fed656..959a43d8 100644 --- a/keystonemiddleware/auth_token/__init__.py +++ b/keystonemiddleware/auth_token/__init__.py @@ -751,9 +751,16 @@ class AuthProtocol(BaseAuthProtocol): self.log.info(_LI('Deferring reject downstream')) else: self.log.info(_LI('Rejecting request')) + message = 'The request you have made requires authentication.' + body = {'error': { + 'code': 401, + 'title': 'Unauthorized', + 'message': message, + }} raise webob.exc.HTTPUnauthorized( - body='Authentication required', - headers=self._reject_auth_headers) + body=jsonutils.dumps(body), + headers=self._reject_auth_headers, + content_type='application/json') if request.user_token_valid: user_auth_ref = request.token_auth._user_auth_ref diff --git a/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py b/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py index 942f2c03..b2572a0f 100644 --- a/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py +++ b/keystonemiddleware/tests/unit/auth_token/test_auth_token_middleware.py @@ -1925,7 +1925,8 @@ class CommonCompositeAuthTests(object): resp = self.call_middleware(headers={'X-Auth-Token': token, 'X-Service-Token': service_token}, expected_status=401) - self.assertEqual(b'Authentication required', resp.body) + expected_body = b'The request you have made requires authentication.' + self.assertThat(resp.body, matchers.Contains(expected_body)) def test_composite_auth_no_service_token(self): self.purge_service_token_expected_env() @@ -1952,13 +1953,15 @@ class CommonCompositeAuthTests(object): resp = self.call_middleware(headers={'X-Auth-Token': token, 'X-Service-Token': service_token}, expected_status=401) - self.assertEqual(b'Authentication required', resp.body) + expected_body = b'The request you have made requires authentication.' + self.assertThat(resp.body, matchers.Contains(expected_body)) def test_composite_auth_no_user_token(self): service_token = self.token_dict['uuid_service_token_default'] resp = self.call_middleware(headers={'X-Service-Token': service_token}, expected_status=401) - self.assertEqual(b'Authentication required', resp.body) + expected_body = b'The request you have made requires authentication.' + self.assertThat(resp.body, matchers.Contains(expected_body)) def test_composite_auth_delay_ok(self): self.middleware._delay_auth_decision = True