Add ONVIF authentication with UsernameToken support#2231
Open
ssttevee wants to merge 1 commit into
Open
Conversation
- Allow independent ONVIF auth via config - Skip API auth for /onvif/* paths - Require WS-Security UsernameToken for ONVIF SOAP requests - Add tests for ONVIF and API authentication logic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
AI DISCLOSURE: This feature was so straightforward that I wanted to try using codex and as far as I can tell, it did quite well. I did review the changes before opening this PR and nothing really bad stuck out to me (some global vars but seems valid tbh).
Summary
api.username/api.passwordHTTP Basic auth to/onvif/*so ONVIF SOAP requests can reach the ONVIF handleronvif.username/onvif.passwordconfig and validate WS-SecurityUsernameTokencredentials inside the ONVIF serviceGetSystemDateAndTimeunauthenticated and return an ONVIF-styleter:NotAuthorizedSOAP fault when ONVIF auth failsReasoning
External ONVIF clients such as ODM, NVRs, and VMS platforms typically authenticate with WS-Security
UsernameTokenin the SOAP header, not HTTP Basic auth. When go2rtc applies API Basic auth to the shared HTTP listener, those clients fail before the SOAP request can be processed.This change separates the two auth layers:
api.username/api.passwordGetSystemDateAndTimestays open because ONVIF clients commonly use it first to calculate clock skew before generating a valid password digestSources
Testing
go test ./pkg/onvif ./internal/api ./internal/onvifcloses #2148