Skip to content

Conversation

@shaun-nx
Copy link
Contributor

@shaun-nx shaun-nx commented Dec 9, 2025

Proposed changes

This change updates the AuthenticationFilter proposal.

Changes made:

  • Update API validation
  • Removal of OnFailure configuration
  • Add additional details on functional testing

Details related to AuthFailure are captured in the Stretch Goals section

Closes #4423

Checklist

Before creating a PR, run through this checklist and mark each as complete.

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works
  • I have checked that all unit tests pass after adding my changes
  • I have updated necessary documentation
  • I have rebased my branch onto main
  • I will ensure my PR is targeting the main branch and pulling from my branch from my own fork

Release notes

If this PR introduces a change that affects users and needs to be mentioned in the release notes,
please add a brief note that summarizes the change.


@github-actions github-actions bot added the documentation Improvements or additions to documentation label Dec 9, 2025
@codecov
Copy link

codecov bot commented Dec 9, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 86.09%. Comparing base (7c76b0f) to head (1bb11c0).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #4424   +/-   ##
=======================================
  Coverage   86.09%   86.09%           
=======================================
  Files         132      132           
  Lines       14381    14381           
  Branches       35       35           
=======================================
  Hits        12382    12382           
+ Misses       1788     1787    -1     
- Partials      211      212    +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

// LocalObjectReference specifies a local Kubernetes object.
type LocalObjectReference struct {
// Name is the referenced object.
Name string `json:"name"`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is this for?

Copy link
Contributor Author

@shaun-nx shaun-nx Dec 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This object is for the SecretRef for storing the name of the secret.
It used to be here in the API. It just got moved up.


- Resolved filter referenced by a single route rule within a single HTTP/GRPCRoute
- Resolved filter referenced by multiple route rules within a single HTTP/GRPCRoute
- Resolved filter referenced by multiple HTTP/GRPCRoutes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • each root has own auth

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 2nd test in this list is intended to capture that test case.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe we have different dictionary. for me second i see like: one route with two rules, that is not valid

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah right, I see what you mean. My scenario is multiple separate route rules. This is the same as what you mean.
But, we don't have a test case for multiple routes in one rule. I'll add a case for that as well 😄

Invalid reference scenarios:

- Resolved filter referenced multiple times in a single route rule within a single HTTP/GRPCRoute
- Resolved filter referenced multiple times in a single route rule within a single HTTP/GRPCRoute
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

twice the same>


- Resolved filter referenced multiple times in a single route rule within a single HTTP/GRPCRoute
- Resolved filter referenced multiple times in a single route rule within a single HTTP/GRPCRoute
- Resolved filter referenced multiple times by multiple route rules within a single HTTP/GRPCRoute
Copy link
Contributor

@tataruty tataruty Dec 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually. What is expected behaviour here and above? i cannot understand the scenario as a functional test and not a unit

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are intended to be invalid testing cases.
But you make a good point, I don't list the expected outcome. I'll add those here as well

Copy link
Contributor

@tataruty tataruty Dec 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i see invalid functional tests for authentication as: Authentication failed or Authentication passed - for valid, means we get a response from the route behind auth filter
Resolved/Unresolved more sound like a unit test

- Resolved filter referenced multiple times in a single route rule within a single HTTP/GRPCRoute
- Resolved filter referenced multiple times by multiple route rules within a single HTTP/GRPCRoute
- Unresolved filter referenced by a single route rule within a single HTTP/GRPCRoute
- Unresolved filter referenced by multiple route rules within a single HTTP/GRPCRoute
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same question

@shaun-nx shaun-nx requested a review from tataruty December 9, 2025 15:29
@shaun-nx shaun-nx requested a review from Copilot December 9, 2025 17:35
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the AuthenticationFilter proposal by refining the API design, removing the OnFailure configuration from the main spec, and enhancing documentation quality. The changes move AuthFailure customization to stretch goals while improving clarity throughout the proposal.

Key Changes:

  • Removed OnFailure configuration from BasicAuth and JWTAuth specs, relocating it to stretch goals
  • Enhanced functional testing section with detailed test case scenarios
  • Fixed numerous spelling and grammatical errors throughout the document

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@shaun-nx shaun-nx requested a review from Copilot December 9, 2025 18:23
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +164 to 167
type LocalObjectReference struct {
// Name is the referenced object.
Name string `json:"name"`
}
Copy link

Copilot AI Dec 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The LocalObjectReference struct definition has been moved to after BasicAuth, but the comment on line 154 still refers to it. Consider adding a comment explaining that this is a simplified version compared to the Kubernetes core LocalObjectReference, which includes a key field.

Copilot uses AI. Check for mistakes.

### Functional Test Cases

Note: The keyword "resolved" is used to refer to a filter that the controller has found, and matches the reference of the route rule.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i see invalid functional tests for authentication as Authentication failed, and Authentication passed - for valid, means we get a response from the route behind auth filter.
Don't we do this full check in functional tests?

- Expected outcome: Requests to all route rules referencing the filter successfully process authentication requests
- Resolved filter referenced by rules in multiple HTTP/GRPCRoutes
- Expected outcome: Requests to all route rules across each HTTP/GRPCRoute successfully process authentication requests

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With our other functional tests, we also verify that the nginx configuration is correct.

```text
The realm value is a free-form string
that can only be compared for equality with other realms on that
server. The server will service the request only if it can validate
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
server. The server will service the request only if it can validate

// +kubebuilder:object:root=true
// +kubebuilder:storageversion
// +kubebuilder:subresource:status
// +kubebuilder:resource:categories=nginx-gateway-fabric,shortName=authfilter;authenticationfilter
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is the short name only descriptive? or it can be used in the spec to specify fields?

Comment on lines +965 to +966
statusCode: 401
scheme: Basic
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: use any other code to show case custom option, 401 is the default.

### Additional Fields for JWT
`require`, `tokenSource` and `propagation` are some additional fields that may be incldued in future updates to the API.
`require`, `tokenSource` and `propagation` are some additional fields that may be included in future updates to the API.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it would be nice to just put the future updates in another section, i saw some spread out and got a little confused on what's part of this feature work and what could get added in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

Status: 🆕 New

Development

Successfully merging this pull request may close these issues.

Update AuthenticationFilter proposal

5 participants