mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
[Authz] Added justification for authz opt out for security routes (#209527)
## Summary Added justification for authz opt out for security routes. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
parent
3394b691b1
commit
f058b50f93
12 changed files with 153 additions and 12 deletions
|
@ -12,7 +12,19 @@ export function resetSessionPageRoutes({ httpResources }: RouteDefinitionParams)
|
|||
{
|
||||
path: '/internal/security/reset_session_page.js',
|
||||
validate: false,
|
||||
options: { authRequired: false, excludeFromOAS: true },
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authentication because it is a host for reset session page.',
|
||||
},
|
||||
authc: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it is a host for reset session page.',
|
||||
},
|
||||
},
|
||||
},
|
||||
(context, request, response) => {
|
||||
return response.renderJs({
|
||||
|
|
|
@ -24,7 +24,18 @@ export function defineAccessAgreementRoutes({
|
|||
const canHandleRequest = () => license.getFeatures().allowAccessAgreement;
|
||||
|
||||
httpResources.register(
|
||||
{ path: '/security/access_agreement', validate: false, options: { excludeFromOAS: true } },
|
||||
{
|
||||
path: '/security/access_agreement',
|
||||
validate: false,
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it requires only proper license in order to function',
|
||||
},
|
||||
},
|
||||
},
|
||||
createLicensedRouteHandler(async (context, request, response) =>
|
||||
canHandleRequest()
|
||||
? response.renderCoreApp()
|
||||
|
|
|
@ -12,7 +12,18 @@ import type { RouteDefinitionParams } from '..';
|
|||
*/
|
||||
export function defineAccountManagementRoutes({ httpResources }: RouteDefinitionParams) {
|
||||
httpResources.register(
|
||||
{ path: '/security/account', validate: false, options: { excludeFromOAS: true } },
|
||||
{
|
||||
path: '/security/account',
|
||||
validate: false,
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it a host for the account management view.',
|
||||
},
|
||||
},
|
||||
},
|
||||
(context, req, res) => res.renderCoreApp()
|
||||
);
|
||||
}
|
||||
|
|
|
@ -34,7 +34,17 @@ describe('Capture URL view routes', () => {
|
|||
});
|
||||
|
||||
it('correctly defines route.', () => {
|
||||
expect(routeConfig.options).toEqual({ authRequired: false, excludeFromOAS: true });
|
||||
expect(routeConfig.options).toEqual({ excludeFromOAS: true });
|
||||
|
||||
expect(routeConfig.security).toEqual(
|
||||
expect.objectContaining({
|
||||
authc: { enabled: false, reason: expect.any(String) },
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason: expect.any(String),
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
expect(routeConfig.validate).toEqual({
|
||||
body: undefined,
|
||||
|
|
|
@ -19,7 +19,19 @@ export function defineCaptureURLRoutes({ httpResources }: RouteDefinitionParams)
|
|||
validate: {
|
||||
query: schema.object({ next: schema.maybe(schema.string()) }, { unknowns: 'ignore' }),
|
||||
},
|
||||
options: { authRequired: false, excludeFromOAS: true },
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it is used for anonymous access.',
|
||||
},
|
||||
authc: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authentication because it is used for anonymous access.',
|
||||
},
|
||||
},
|
||||
},
|
||||
(context, request, response) => response.renderAnonymousCoreApp()
|
||||
);
|
||||
|
|
|
@ -35,7 +35,16 @@ describe('LoggedOut view routes', () => {
|
|||
});
|
||||
|
||||
it('correctly defines route.', () => {
|
||||
expect(routeConfig.options).toEqual({ authRequired: false, excludeFromOAS: true });
|
||||
expect(routeConfig.options).toEqual({ excludeFromOAS: true });
|
||||
expect(routeConfig.security).toEqual(
|
||||
expect.objectContaining({
|
||||
authc: { enabled: false, reason: expect.any(String) },
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason: expect.any(String),
|
||||
},
|
||||
})
|
||||
);
|
||||
expect(routeConfig.validate).toBe(false);
|
||||
});
|
||||
|
||||
|
|
|
@ -20,7 +20,19 @@ export function defineLoggedOutRoutes({
|
|||
{
|
||||
path: '/security/logged_out',
|
||||
validate: false,
|
||||
options: { authRequired: false, excludeFromOAS: true },
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it is a host for the logged out view.',
|
||||
},
|
||||
authc: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authentication because it is a host for the logged out view.',
|
||||
},
|
||||
},
|
||||
},
|
||||
async (context, request, response) => {
|
||||
// Authentication flow isn't triggered automatically for this route, so we should explicitly
|
||||
|
|
|
@ -52,7 +52,17 @@ describe('Login view routes', () => {
|
|||
});
|
||||
|
||||
it('correctly defines route.', () => {
|
||||
expect(routeConfig.options).toEqual({ authRequired: 'optional', excludeFromOAS: true });
|
||||
expect(routeConfig.options).toEqual({ excludeFromOAS: true });
|
||||
|
||||
expect(routeConfig.security).toEqual(
|
||||
expect.objectContaining({
|
||||
authc: { enabled: 'optional' },
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason: expect.any(String),
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
expect(routeConfig.validate).toEqual({
|
||||
body: undefined,
|
||||
|
|
|
@ -39,7 +39,16 @@ export function defineLoginRoutes({
|
|||
{ unknowns: 'allow' }
|
||||
),
|
||||
},
|
||||
options: { authRequired: 'optional', excludeFromOAS: true },
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authc: {
|
||||
enabled: 'optional',
|
||||
},
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason: 'This route is opted out from authorization because it is a host for login view.',
|
||||
},
|
||||
},
|
||||
},
|
||||
async (context, request, response) => {
|
||||
// Default to true if license isn't available or it can't be resolved for some reason.
|
||||
|
|
|
@ -12,7 +12,23 @@ import type { RouteDefinitionParams } from '..';
|
|||
*/
|
||||
export function defineLogoutRoutes({ httpResources }: RouteDefinitionParams) {
|
||||
httpResources.register(
|
||||
{ path: '/logout', validate: false, options: { authRequired: false, excludeFromOAS: true } },
|
||||
{
|
||||
path: '/logout',
|
||||
validate: false,
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it is a host for the logout view.',
|
||||
},
|
||||
authc: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authentication because it is a host for the logout view.',
|
||||
},
|
||||
},
|
||||
},
|
||||
(context, request, response) => response.renderAnonymousCoreApp()
|
||||
);
|
||||
}
|
||||
|
|
|
@ -12,7 +12,18 @@ import type { RouteDefinitionParams } from '..';
|
|||
*/
|
||||
export function defineOverwrittenSessionRoutes({ httpResources }: RouteDefinitionParams) {
|
||||
httpResources.register(
|
||||
{ path: '/security/overwritten_session', validate: false, options: { excludeFromOAS: true } },
|
||||
{
|
||||
path: '/security/overwritten_session',
|
||||
validate: false,
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it is a host for the overwritten session view.',
|
||||
},
|
||||
},
|
||||
},
|
||||
(context, req, res) => res.renderCoreApp()
|
||||
);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,18 @@ export interface ViewRouteDeps {
|
|||
|
||||
export function initSpacesViewsRoutes(deps: ViewRouteDeps) {
|
||||
deps.httpResources.register(
|
||||
{ path: '/spaces/space_selector', validate: false, options: { excludeFromOAS: true } },
|
||||
{
|
||||
path: '/spaces/space_selector',
|
||||
validate: false,
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'This route is opted out from authorization because it a host for the spaces selector view.',
|
||||
},
|
||||
},
|
||||
},
|
||||
(context, request, response) => response.renderCoreApp()
|
||||
);
|
||||
|
||||
|
@ -33,6 +44,13 @@ export function initSpacesViewsRoutes(deps: ViewRouteDeps) {
|
|||
),
|
||||
},
|
||||
options: { excludeFromOAS: true },
|
||||
security: {
|
||||
authz: {
|
||||
enabled: false,
|
||||
reason:
|
||||
'The route is opted out from authorization because it handles redirects to internal routes.',
|
||||
},
|
||||
},
|
||||
},
|
||||
async (context, request, response) => {
|
||||
try {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue