228 Commits

Author SHA1 Message Date
Ramon de2fd41f40 fix: allow native clients to use https:// on localhost redirects (#691) 2025-01-17 13:53:19 +00:00
isegura-eos-eng 6d20928028 refactor: mark pkg/strings as deprecated in favor of stdlib (#680)
* refactor: mark pkg/strings as deprecated in favor of stdlib

* format: reword deprecate notice and use doc links
2024-11-15 18:47:32 +02:00
isegura-eos-eng 897c720070 fix(op): add scope to access token scope (#664) 2024-11-13 08:49:55 +00:00
Kevin Schoonover 8afb8b8d5f feat(pkg/op): allow custom SupportedScopes (#675)
Co-authored-by: Tim Möhlmann <tim+github@zitadel.com>
2024-11-12 15:06:24 +00:00
Livio Spring f1e4cb2245 feat(OP): add back channel logout support (#671)
* feat: add configuration support for back channel logout

* logout token

* indicate back channel logout support in discovery endpoint
2024-10-30 08:44:31 +00:00
Tim Möhlmann 1e75773eaa fix(op): initialize http Headers in response objects (#637)
* fix(op): initialize http Headers in response objects

* fix test

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
2024-08-21 09:34:26 +02:00
Tim Möhlmann 0aa61b0b98 fix(op): do not redirect to unverified uri on error (#640)
Closes #627
2024-08-21 09:29:14 +02:00
Elio Bischof 6f0a630ad4 fix: overwrite redirect content length (#632)
* fix: overwrite redirect content length

* copy redirect struct headers
2024-08-06 12:58:52 +03:00
Tim Möhlmann a7b5355580 feat(op): allow scope without openid (#613)
This changes removes the requirement of the openid scope to be set for all token requests.
As this library also support OAuth2-only authentication mechanisms we still want to sanitize requested scopes, but not enforce the openid scope.

Related to https://github.com/zitadel/zitadel/discussions/8068
2024-06-13 08:16:46 +02:00
Tim Möhlmann 37ca0e472a feat(op): authorize callback handler as argument in legacy server registration (#598)
This change requires an additional argument to the op.RegisterLegacyServer constructor which passes the Authorize Callback Handler.
This allows implementations to use their own handler instead of the one provided by the package.
The current handler is exported for legacy behavior.

This change is not considered breaking, as RegisterLegacyServer is flagged experimental.

Related to https://github.com/zitadel/zitadel/issues/6882
2024-04-30 20:27:12 +03:00
Tim Möhlmann 33f8df7eb2 feat(deps): update go-jose to v4 (#588)
This change updates to go-jose v4, which was a new major release.

jose.ParseSigned now expects the supported signing algorithms to be passed, on which we previously did our own check. As they use a dedicated type for this, the slice of string needs to be converted. The returned error also need to be handled in a non-standard way in order to stay compatible.

For OIDC v4 we should use the jose.SignatureAlgorithm  type directly and wrap errors, instead of returned static defined errors.

Closes #583
2024-04-11 18:13:30 +03:00
Tim Möhlmann 4d63d68c9e feat(op): allow setting the actor to Token Requests (#569)
For impersonation token exchange we need to persist the actor throughout token requests, including refresh token.
This PR adds the optional TokenActorRequest interface which allows to pass such actor.
2024-03-14 06:57:44 +00:00
adlerhurst 1b94f796eb move tracer to client,
add tracing in rs, client
2024-03-13 15:45:03 +01:00
adlerhurst 0fe7c3307f fix parse 2024-03-07 15:25:23 +01:00
adlerhurst 7069813ec7 correct span names 2024-03-07 10:44:24 +01:00
adlerhurst 88209ac11d fix tests 2024-03-06 19:08:48 +01:00
adlerhurst bdcccc3303 feat(client): tracing in rp 2024-03-06 18:39:27 +01:00
adlerhurst d18aba8cb3 feat(rp): extend tracing 2024-03-06 18:38:37 +01:00
Ayato 5ef597b1db feat(op): Add response_mode: form_post (#551)
* feat(op): Add response_mode: form_post

* Fix to parse the template ahead of time

* Fix to render the template in a buffer

* Remove unnecessary import

* Fix test

* Fix example client setting

* Make sure the client not to reuse the content of the response

* Fix error handling

* Add the response_mode param

* Allow implicit flow in the example app

* feat(rp): allow form_post in code exchange callback handler

---------

Co-authored-by: Tim Möhlmann <tim+github@zitadel.com>
2024-03-05 15:04:43 +02:00
Tim Möhlmann 972b8981e5 feat: go 1.22 and slog migration (#557)
This change adds Go 1.22 as a build target and drops support for Go 1.20 and older. The golang.org/x/exp/slog import is migrated to log/slog.

Slog has been part of the Go standard library since Go 1.21. Therefore we are dropping support for older Go versions. This is in line of our support policy of "the latest two Go versions".
2024-02-28 10:44:14 +01:00
Tim Möhlmann 045b59e5a5 fix(op): allow expired id token hints in authorize (#527)
Like https://github.com/zitadel/oidc/pull/522 for end session,
this change allows passing an expired ID token hint to the authorize endpoint.
2024-02-01 13:49:22 +01:00
Tim Möhlmann e9bd7d7bac feat(op): split the access and ID token hint verifiers (#525)
* feat(op): split the access and ID token hint verifiers

In zitadel we require different behaviors wrt public key expiry between access tokens and ID token hints.
This change splits the two verifiers in the OP.
The default is still based on Storage and passed to both verifier fields.

* add new options to tests
2024-01-26 16:44:50 +01:00
Tim Möhlmann b8e520afd0 fix: allow expired ID token hint to end sessions (#522)
* fix: allow expired ID token hint to end sessions

This change adds a specific error for expired ID Token hints, including too old "issued at" and "max auth age".
The error is returned VerifyIDTokenHint so that the end session handler can choose to ignore this error.

This fixes the behavior to be in line with [OpenID Connect RP-Initiated Logout 1.0, section 4](https://openid.net/specs/openid-connect-rpinitiated-1_0.html#ValidationAndErrorHandling).

* Tes IDTokenHintExpiredError
2024-01-19 11:30:51 +01:00
Tim Möhlmann 57d04e7465 fix: don't force server errors in legacy server (#517)
* fix: don't force server errors in legacy server

* fix tests and be more consistent with the returned status code
2024-01-17 16:06:45 +01:00
Tim Möhlmann 844e2337bb fix(op): check redirect URI in code exchange (#516)
This changes fixes a missing redirect check in the Legacy Server's Code Exchange handler.
2024-01-16 07:18:41 +01:00
Tim Möhlmann c37ca25220 feat(op): allow double star globs (#507)
Related to https://github.com/zitadel/zitadel/issues/5110
2024-01-05 17:30:17 +02:00
Tim Möhlmann b300027cd7 feat(op): ID token for device authorization grant (#500) 2023-12-18 08:39:39 +01:00
snow 7bdaf9c71d feat(op): User-configurable claims_supported (#495)
* User-configurable claims_supported

* Use op.SupportedClaims instead of interface
2023-12-17 12:06:42 +00:00
Stephen Andary 9d12d1d900 feat(op): PKCE Verification in Legacy Server when AuthMethod is not NONE and CodeVerifier is not Empty (#496)
* add logic for legacy server pkce verification when auth method is not None, and code verifier is not empty.

* update per Tim's direction
2023-12-07 17:36:03 +02:00
Stefan Benz a8ef8de87b feat(op): JWT profile verifier with keyset
feat(op): JWT profile verifier with keyset
2023-11-21 10:26:57 +01:00
Kory Prince 7b64687990 feat: Allow CORS policy to be configured (#484)
* Add configurable CORS policy in OpenIDProvider

* Add configurable CORS policy to Server

* remove duplicated CORS middleware

* Allow nil CORS policy to be set to disable CORS middleware

* create a separate handler on webServer so type assertion works in tests
2023-11-17 15:33:48 +02:00
Tim Möhlmann f6bd17e8db correct comment 2023-11-13 19:28:01 +02:00
Tim Möhlmann c6b5544516 Merge branch 'main' into perf-introspection 2023-11-13 18:17:09 +02:00
Tim Möhlmann d88c0ac296 fix(op): export NewProvider to allow customized issuer (#479) 2023-11-10 15:26:54 +01:00
Tim Möhlmann 7475023a65 feat(op): issuer from custom headers (#478) 2023-11-10 14:18:08 +02:00
Tim Möhlmann f7a0f7cb0b feat(op): create a JWT profile with a keyset 2023-11-10 09:36:08 +02:00
Tim Möhlmann 73a1982077 fix(server): do not get client by id for introspection (#467)
As introspection is a Oauth mechanism for resource servers only,
it does not make sense to get an oidc client by ID.
The original OP did not do this and now we make the server behavior similar.
2023-10-24 18:07:20 +03:00
Tim Möhlmann e5f0dca0e4 fix: build callback url from server, not op (#468) 2023-10-24 18:06:04 +03:00
Tim Möhlmann bab5399859 feat(op): allow Legacy Server extension (#466)
This change splits the constructor and registration of the Legacy Server.
This allows it to be extended by struct embedding.
2023-10-24 10:20:02 +03:00
Tim Möhlmann 164c5b28c7 fix(op): terminate session from request in legacy server (#465) 2023-10-24 10:16:58 +03:00
Tim Möhlmann 434b2e62d8 chore(op): upgrade go-chi/chi to v5 (#462) 2023-10-16 11:02:56 +02:00
Tim Möhlmann 0dc2a6e7a1 fix(op): return state in token response only for implicit flow (#460)
* fix(op): return state in token response only for implicit flow

* oops
2023-10-13 12:17:03 +00:00
Tim Möhlmann d9487ef77d Merge branch 'next' into next-main 2023-10-12 16:07:49 +03:00
Thomas Hipp e6e3835362 chore: replace interface{} with any (#448)
This PR replaces all occurances of interface{} with any to be consistent and improve readability.

* example: Replace `interface{}` with `any`

Signed-off-by: Thomas Hipp <thomashipp@gmail.com>

* pkg/client: Replace `interface{}` with `any`

Signed-off-by: Thomas Hipp <thomashipp@gmail.com>

* pkg/crypto: Replace `interface{}` with `any`

Signed-off-by: Thomas Hipp <thomashipp@gmail.com>

* pkg/http: Replace `interface{}` with `any`

Signed-off-by: Thomas Hipp <thomashipp@gmail.com>

* pkg/oidc: Replace `interface{}` with `any`

Signed-off-by: Thomas Hipp <thomashipp@gmail.com>

* pkg/op: Replace `interface{}` with `any`

Signed-off-by: Thomas Hipp <thomashipp@gmail.com>

---------

Signed-off-by: Thomas Hipp <thomashipp@gmail.com>
2023-10-12 12:41:04 +03:00
Tim Möhlmann 0f8a0585bf feat(op): Server interface (#447)
* first draft of a new server interface

* allow any response type

* complete interface docs

* refelct the format from the proposal

* intermediate commit with some methods implemented

* implement remaining token grant type methods

* implement remaining server methods

* error handling

* rewrite auth request validation

* define handlers, routes

* input validation and concrete handlers

* check if client credential client is authenticated

* copy and modify the routes test for the legacy server

* run integration tests against both Server and Provider

* remove unuse ValidateAuthRequestV2 function

* unit tests for error handling

* cleanup tokenHandler

* move server routest test

* unit test authorize

* handle client credentials in VerifyClient

* change code exchange route test

* finish http unit tests

* review server interface docs and spelling

* add withClient unit test

* server options

* cleanup unused GrantType method

* resolve typo comments

* make endpoints pointers to enable/disable them

* jwt profile base work

* jwt: correct the test expect

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
2023-09-28 17:30:08 +03:00
Tim Möhlmann 364a7591d6 feat: issuer from Forwarded header (#443) 2023-09-07 15:25:39 +03:00
Tim Möhlmann daf82a5e04 chore(deps): migrage jose to go-jose/v3 (#433)
closes #390
2023-09-01 14:33:16 +03:00
Tim Möhlmann 1683b319ae feat(op): add opentelemetry to token endpoint (#436)
* feat(op): add opentelemetry to token endpoint

* drop go 1.18, add 1.21, do not fail fast
2023-09-01 10:53:14 +02:00
David Sharnoff 5ade1cd9de feat: add typ:JWT header to tokens (#435) 2023-08-31 12:47:17 +03:00
Tim Möhlmann 0879c88399 feat: add slog logging (#432)
* feat(op): user slog for logging

integrate with golang.org/x/exp/slog for logging.
provide a middleware for request scoped logging.

BREAKING CHANGES:

1. OpenIDProvider and sub-interfaces get a Logger()
method to return the configured logger;
2. AuthRequestError now takes the complete Authorizer,
instead of only the encoder. So that it may use its Logger() method.
3. RequestError now takes a Logger as argument.

* use zitadel/logging

* finish op and testing
without middleware for now

* minimum go version 1.19

* update go mod

* log value testing only on go 1.20 or later

* finish the RP and example

* ping logging release
2023-08-29 14:07:45 +02:00