From f0a701080813e75f773a3755974fdb0e2a720c1a Mon Sep 17 00:00:00 2001 From: Joseph Chen Date: Fri, 9 Oct 2020 23:05:29 -0700 Subject: [PATCH] Properly set the status code for errors according to Section 4.2.2.1 of RFC 6749 and Section 3.1 of RFC 6750. Fixes for #553. --- dist/lib/handlers/authenticate-handler.js | 4 ++++ dist/lib/handlers/authenticate-handler.js.map | 2 +- lib/handlers/authenticate-handler.ts | 15 ++++++++------- .../handlers/authenticate-handler.spec.ts | 7 +++++++ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/dist/lib/handlers/authenticate-handler.js b/dist/lib/handlers/authenticate-handler.js index b3dbe4374..680171eff 100644 --- a/dist/lib/handlers/authenticate-handler.js +++ b/dist/lib/handlers/authenticate-handler.js @@ -48,6 +48,7 @@ class AuthenticateHandler { catch (e) { if (e instanceof errors_1.UnauthorizedRequestError) { response.set('WWW-Authenticate', 'Bearer realm="Service"'); + response.status = 401; } else if (e instanceof errors_1.InvalidRequestError) { if (e.message) { @@ -56,6 +57,7 @@ class AuthenticateHandler { else { response.set('WWW-Authenticate', `Bearer realm="Service",error="invalid_request"`); } + response.status = 400; } else if (e instanceof errors_1.InvalidTokenError) { if (e.message) { @@ -64,6 +66,7 @@ class AuthenticateHandler { else { response.set('WWW-Authenticate', `Bearer realm="Service",error="invalid_token"`); } + response.status = 401; } else if (e instanceof errors_1.InsufficientScopeError) { if (e.message) { @@ -72,6 +75,7 @@ class AuthenticateHandler { else { response.set('WWW-Authenticate', `Bearer realm="Service",error="insufficient_scope"`); } + response.status = 403; } if (!(e instanceof errors_1.OAuthError)) { throw new errors_1.ServerError(e); diff --git a/dist/lib/handlers/authenticate-handler.js.map b/dist/lib/handlers/authenticate-handler.js.map index 87d3f4955..cbf532f16 100644 --- a/dist/lib/handlers/authenticate-handler.js.map +++ b/dist/lib/handlers/authenticate-handler.js.map @@ -1 +1 @@ -{"version":3,"file":"authenticate-handler.js","sourceRoot":"","sources":["../../../lib/handlers/authenticate-handler.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"authenticate-handler.js","sourceRoot":"","sources":["../../../lib/handlers/authenticate-handler.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/handlers/authenticate-handler.ts b/lib/handlers/authenticate-handler.ts index c779252fe..0d4ed3bbe 100755 --- a/lib/handlers/authenticate-handler.ts +++ b/lib/handlers/authenticate-handler.ts @@ -91,27 +91,28 @@ export class AuthenticateHandler { // @see https://tools.ietf.org/html/rfc6750#section-3.1 if (e instanceof UnauthorizedRequestError) { response.set('WWW-Authenticate', 'Bearer realm="Service"'); + response.status = 401; } else if (e instanceof InvalidRequestError) { if (e.message) { response.set('WWW-Authenticate', `Bearer realm="Service",error="invalid_request",error_description="${e.message}"`); - } - else { + } else { response.set('WWW-Authenticate', `Bearer realm="Service",error="invalid_request"`); } + response.status = 400; } else if (e instanceof InvalidTokenError) { if (e.message) { - response.set('WWW-Authenticate', `Bearer realm="Service",error="invalid_token",error_description="${e.message}"`) - } - else { + response.set('WWW-Authenticate', `Bearer realm="Service",error="invalid_token",error_description="${e.message}"`); + } else { response.set('WWW-Authenticate', `Bearer realm="Service",error="invalid_token"`); } + response.status = 401; } else if (e instanceof InsufficientScopeError) { if (e.message) { response.set('WWW-Authenticate', `Bearer realm="Service",error="insufficient_scope",error_description="${e.message}"`); - } - else { + } else { response.set('WWW-Authenticate', `Bearer realm="Service",error="insufficient_scope"`); } + response.status = 403; } if (!(e instanceof OAuthError)) { diff --git a/test/integration/handlers/authenticate-handler.spec.ts b/test/integration/handlers/authenticate-handler.spec.ts index 52b360e4c..12c7b5a08 100755 --- a/test/integration/handlers/authenticate-handler.spec.ts +++ b/test/integration/handlers/authenticate-handler.spec.ts @@ -156,6 +156,7 @@ describe('AuthenticateHandler integration', () => { response .get('WWW-Authenticate') .should.equal('Bearer realm="Service"'); + response.status.should.equal(401); }); }); @@ -175,6 +176,7 @@ describe('AuthenticateHandler integration', () => { }) .catch(() => { response.get('WWW-Authenticate').should.equal('Bearer realm="Service",error="invalid_request",error_description="Bad Request"'); + response.status.should.equal(400); }); }); @@ -195,6 +197,7 @@ describe('AuthenticateHandler integration', () => { }) .catch(() => { response.get('WWW-Authenticate').should.equal(`Bearer realm="Service",error="invalid_request",error_description="${errorDescription}"`); + response.status.should.equal(400); }); }); @@ -214,6 +217,7 @@ describe('AuthenticateHandler integration', () => { }) .catch(() => { response.get('WWW-Authenticate').should.equal('Bearer realm="Service",error="invalid_token",error_description="Unauthorized"'); + response.status.should.equal(401); }); }); @@ -234,6 +238,7 @@ describe('AuthenticateHandler integration', () => { }) .catch(() => { response.get('WWW-Authenticate').should.equal(`Bearer realm="Service",error="invalid_token",error_description="${errorDescription}"`); + response.status.should.equal(401); }); }); @@ -253,6 +258,7 @@ describe('AuthenticateHandler integration', () => { }) .catch(() => { response.get('WWW-Authenticate').should.equal('Bearer realm="Service",error="insufficient_scope",error_description="Forbidden"'); + response.status.should.equal(403); }); }); @@ -273,6 +279,7 @@ describe('AuthenticateHandler integration', () => { }) .catch(() => { response.get('WWW-Authenticate').should.equal(`Bearer realm="Service",error="insufficient_scope",error_description="${errorDescription}"`); + response.status.should.equal(403); }); });