Commit graph

396 commits

Author SHA1 Message Date
Tim Möhlmann
c43d0e7295 feat: add docker file for static server example 2023-03-28 16:43:25 +03:00
Tim Möhlmann
b7d18bfd02
chore: document non-standard glob client (#328)
* op: correct typo

rename checkURIAginstRedirects to checkURIAgainstRedirects

* chore: document standard deviation when using globs

add example on how to toggle the underlying
client implementation based on DevMode.

---------

Co-authored-by: David Sharnoff <dsharnoff@singlestore.com>
2023-03-28 14:58:57 +03:00
David Sharnoff
e1d50faf9b fix: do not modify userInfo when marshaling 2023-03-28 12:58:34 +03:00
Tim Möhlmann
be3cc13c27
fix: merge user info claims into id token claims (#349)
oidc IDTokenClaims.SetUserInfo did not set the claims map from user info.
This fix merges the claims map into the IDToken Claims map.
2023-03-27 16:41:09 +03:00
David Sharnoff
c9555c7f1b
feat: add CanSetUserinfoFromRequest interface (#347) 2023-03-24 18:55:41 +02:00
dependabot[bot]
edc9a1f60d
Merge pull request #340 from zitadel/dependabot/github_actions/actions/setup-go-4 2023-03-23 12:25:50 +00:00
Tim Möhlmann
a08ce50091 fix: correct returned field for JWTTokenRequest
JWTTokenRequest.GetIssuedAt() was returning the ExpiresAt field.
This change corrects that by returning IssuedAt instead.

This bug was introduced in #283
2023-03-21 11:46:42 +02:00
dependabot[bot]
3c1e81e6a6
chore(deps): bump actions/setup-go from 3 to 4
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 3 to 4.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-20 19:59:14 +00:00
Tim Möhlmann
115813ee38 fix: handle the zero cases for oidc.Time 2023-03-20 17:18:11 +02:00
Tim Möhlmann
890a7f3ed4
feat: GetUserinfo helper method for IDTokenClaims (#337) 2023-03-20 11:06:32 +02:00
dependabot[bot]
bb392314d8 chore(deps): bump google.golang.org/protobuf from 1.29.0 to 1.29.1
Bumps [google.golang.org/protobuf](https://github.com/protocolbuffers/protobuf-go) from 1.29.0 to 1.29.1.
- [Release notes](https://github.com/protocolbuffers/protobuf-go/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf-go/blob/master/release.bash)
- [Commits](https://github.com/protocolbuffers/protobuf-go/compare/v1.29.0...v1.29.1)

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-17 09:52:16 +02:00
Tim Möhlmann
62caf5dafe chore: update features in readme
- rotated features table for better rendering
- add links to specifications in feature table
- remove redundant links from the resources section
- changed "Token Exhange" feature to full yes (PR #255)
- add "Device Authorization" with full yes (PR #285)
2023-03-16 18:44:02 +02:00
Tim Möhlmann
c3775aceaa
Merge pull request #330 from zitadel/main-next
Merges the next branch into main, releasing V2.
2023-03-16 15:01:37 +02:00
Tim Möhlmann
0476b5946e Merge branch 'next' into main-next
prepare the merge of next into main by resolving merge conflicts.
2023-03-15 16:26:32 +02:00
Tim Möhlmann
c6820ba88a
fix: unmarshalling of scopes in access token (#327)
The Scopes field in accessTokenClaims should be a  SpaceDelimitedArray,
in order to allow for correct unmarshalling.

Fixes #318

* adjust test data
2023-03-15 14:44:49 +01:00
Tim Möhlmann
0f3d4f4828
chore: update all modules (#321) 2023-03-15 15:37:02 +02:00
Tim Möhlmann
26d8e32636
chore: test all routes
Co-authored-by: David Sharnoff <dsharnoff@singlestore.com>
2023-03-15 14:32:14 +01:00
Tim Möhlmann
711a194b50 fix: allow RFC3339 encoded time strings
Fixes #292
2023-03-15 15:18:33 +02:00
Tim Möhlmann
dea8bc96ea
refactor: use struct types for claim related types (#283)
* oidc: add regression tests for token claim json

this helps to verify that the same JSON is produced,
after these types are refactored.

* refactor: use struct types for claim related types

BREAKING CHANGE:
The following types are changed from interface to struct type:

- AccessTokenClaims
- IDTokenClaims
- IntrospectionResponse
- UserInfo and related types.

The following methods of OPStorage now take a pointer to a struct type,
instead of an interface:

- SetUserinfoFromScopes
- SetUserinfoFromToken
- SetIntrospectionFromToken

The following functions are now generic, so that type-safe extension
of Claims is now possible:

- op.VerifyIDTokenHint
- op.VerifyAccessToken
- rp.VerifyTokens
- rp.VerifyIDToken

- Changed UserInfoAddress to pointer in UserInfo and
IntrospectionResponse.
This was needed to make omitempty work correctly.
- Copy or merge maps in IntrospectionResponse and SetUserInfo

* op: add example for VerifyAccessToken

* fix: rp: wrong assignment in WithIssuedAtMaxAge

WithIssuedAtMaxAge assigned its value to v.maxAge, which was wrong.
This change fixes that by assiging the duration to v.maxAgeIAT.

* rp: add VerifyTokens example

* oidc: add standard references to:

- IDTokenClaims
- IntrospectionResponse
- UserInfo

* only count coverage for `./pkg/...`
2023-03-10 16:31:22 +02:00
Tim Möhlmann
eea2ed1a51
fix: unmarshalling of scopes in access token (#320)
The Scopes field in accessTokenClaims should be a  SpaceDelimitedArray,
in order to allow for correct unmarshalling.

Fixes #318
2023-03-10 09:46:25 +02:00
Tim Möhlmann
4bd2b742f9 chore: remove unused context in NewOpenIDProvider
BREAKING CHANGE:

- op.NewOpenIDProvider
- op.NewDynamicOpenIDProvider

The call chain of above functions did not use the context anywhere.
This change removes the context from those fucntion arguments.
2023-03-08 16:49:12 +02:00
dependabot[bot]
62f2df7fa3
chore(deps): bump actions/add-to-project from 0.4.0 to 0.4.1 (#294)
Bumps [actions/add-to-project](https://github.com/actions/add-to-project) from 0.4.0 to 0.4.1.
- [Release notes](https://github.com/actions/add-to-project/releases)
- [Commits](https://github.com/actions/add-to-project/compare/v0.4.0...v0.4.1)

---
updated-dependencies:
- dependency-name: actions/add-to-project
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-06 14:34:12 +02:00
dependabot[bot]
fba465dc83
chore(deps): bump github.com/stretchr/testify from 1.8.1 to 1.8.2 (#290)
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.1 to 1.8.2.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.8.1...v1.8.2)

---
updated-dependencies:
- dependency-name: github.com/stretchr/testify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-06 14:31:00 +02:00
David Sharnoff
7e5798569b
fix: glob support for RedirectURIs
Fixes #293
2023-03-06 14:13:35 +02:00
Tim Möhlmann
4dca29f1f9
fix: use the same schema encoder everywhere (#299)
properly register SpaceDelimitedArray for all instances
of schema.Encoder inside the oidc framework.

Closes #295
2023-03-02 14:24:44 +01:00
Tim Möhlmann
fc1a80d274
chore: enable github actions for next branch (#298) 2023-03-02 14:24:13 +01:00
David Sharnoff
1eb4ee1c8e auto install things for "go generate" and then clean up afterwards 2023-03-02 11:27:12 +02:00
David Sharnoff
2d4ce6fde3 go mod tidy 2023-03-02 11:24:46 +02:00
David Sharnoff
ad76a7cb07 remove empty NEXT_RELEASE.md 2023-03-02 11:24:46 +02:00
David Sharnoff
0c74bd51db breaking change: rename GetKeyByIDAndUserID -> GetKeyByIDAndClientID 2023-03-02 11:24:46 +02:00
David Sharnoff
f447b9b6d4 breaking change: Add GetRefreshTokenInfo() to op.Storage 2023-03-02 11:24:46 +02:00
David Sharnoff
f3eae0f329 breaking change: add rp/RelyingParty.GetRevokeEndpoint 2023-03-02 11:24:46 +02:00
Tim Möhlmann
2342f208ef
implement RFC 8628: Device authorization grant 2023-03-01 08:59:17 +01:00
Tim Möhlmann
815ced424c readme: update zitdal docs link
Fixes #286
2023-02-24 11:04:37 +01:00
Tim Möhlmann
03f71a67c2 readme: update example commands 2023-02-24 10:47:01 +01:00
Tim Möhlmann
f6d107340e
make next branch the new pre-release branch (#284) 2023-02-24 10:46:14 +01:00
Emil Bektimirov
8e298791d7
feat: Token Exchange (RFC 8693) (#255)
This change implements OAuth2 Token Exchange in OP according to RFC 8693 (and client code)

Some implementation details:

- OP parses and verifies subject/actor tokens natively if they were issued by OP
- Third-party tokens verification is also possible by implementing additional storage interface
- Token exchange can issue only OP's native tokens (id_token, access_token and refresh_token) with static issuer
2023-02-19 15:57:46 +02:00
Tim Möhlmann
9291ca9908 rp/mock: update go generate package and type
Fixes #281
2023-02-17 14:48:14 +02:00
Tim Möhlmann
c8d61c0858
rp: allow to set custom URL parameters (#273)
* rp: allow to set prompts in AuthURLHandler

Fixes #241

* rp: configuration for handlers with URL options to call RS

Fixes #265
2023-02-13 11:28:46 +02:00
dependabot[bot]
ff2729cb23
chore(deps): bump golang.org/x/text from 0.6.0 to 0.7.0 (#279)
Bumps [golang.org/x/text](https://github.com/golang/text) from 0.6.0 to 0.7.0.
- [Release notes](https://github.com/golang/text/releases)
- [Commits](https://github.com/golang/text/compare/v0.6.0...v0.7.0)

---
updated-dependencies:
- dependency-name: golang.org/x/text
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-13 11:18:18 +02:00
Tim Möhlmann
1165d88c69
feat(op): dynamic issuer depending on request / host (#278)
* feat(op): dynamic issuer depending on request / host

BREAKING CHANGE: The OpenID Provider package is now able to handle multiple issuers with a single storage implementation. The issuer will be selected from the host of the request and passed into the context, where every function can read it from if necessary. This results in some fundamental changes:
 - `Configuration` interface:
   - `Issuer() string` has been changed to `IssuerFromRequest(r *http.Request) string`
   - `Insecure() bool` has been added
 - OpenIDProvider interface and dependants:
   - `Issuer` has been removed from Config struct
   - `NewOpenIDProvider` now takes an additional parameter `issuer` and returns a pointer to the public/default implementation and not an OpenIDProvider interface:
     `NewOpenIDProvider(ctx context.Context, config *Config, storage Storage, opOpts ...Option) (OpenIDProvider, error)` changed to `NewOpenIDProvider(ctx context.Context, issuer string, config *Config, storage Storage, opOpts ...Option) (*Provider, error)`
   - therefore the parameter type Option changed to the public type as well: `Option func(o *Provider) error`
   - `AuthCallbackURL(o OpenIDProvider) func(string) string` has been changed to `AuthCallbackURL(o OpenIDProvider) func(context.Context, string) string`
   - `IDTokenHintVerifier() IDTokenHintVerifier` (Authorizer, OpenIDProvider, SessionEnder interfaces), `AccessTokenVerifier() AccessTokenVerifier` (Introspector, OpenIDProvider, Revoker, UserinfoProvider interfaces) and `JWTProfileVerifier() JWTProfileVerifier` (IntrospectorJWTProfile, JWTAuthorizationGrantExchanger, OpenIDProvider, RevokerJWTProfile interfaces) now take a context.Context parameter `IDTokenHintVerifier(context.Context) IDTokenHintVerifier`, `AccessTokenVerifier(context.Context) AccessTokenVerifier` and `JWTProfileVerifier(context.Context) JWTProfileVerifier`
   - `OidcDevMode` (CAOS_OIDC_DEV) environment variable check has been removed, use `WithAllowInsecure()` Option
 - Signing: the signer is not kept in memory anymore, but created on request from the loaded key:
   - `Signer` interface and func `NewSigner` have been removed
   - `ReadySigner(s Signer) ProbesFn` has been removed
   - `CreateDiscoveryConfig(c Configuration, s Signer) *oidc.DiscoveryConfiguration` has been changed to `CreateDiscoveryConfig(r *http.Request, config Configuration, storage DiscoverStorage) *oidc.DiscoveryConfiguration`
   - `Storage` interface:
     - `GetSigningKey(context.Context, chan<- jose.SigningKey)` has been changed to `SigningKey(context.Context) (SigningKey, error)`
     - `KeySet(context.Context) ([]Key, error)` has been added
     - `GetKeySet(context.Context) (*jose.JSONWebKeySet, error)` has been changed to `KeySet(context.Context) ([]Key, error)`
   - `SigAlgorithms(s Signer) []string` has been changed to `SigAlgorithms(ctx context.Context, storage DiscoverStorage) []string`
   - KeyProvider interface: `GetKeySet(context.Context) (*jose.JSONWebKeySet, error)` has been changed to `KeySet(context.Context) ([]Key, error)`
   - `CreateIDToken`: the Signer parameter has been removed

* move example

* fix examples

* fix mocks

* update readme

* fix examples and update usage

* update go module version to v2

* build branch

* fix(module): rename caos to zitadel

* fix: add state in access token response (implicit flow)

* fix: encode auth response correctly (when using query in redirect uri)

* fix query param handling

* feat: add all optional claims of the introspection response

* fix: use default redirect uri when not passed

* fix: exchange cors library and add `X-Requested-With` to Access-Control-Request-Headers (#261)

* feat(op): add support for client credentials

* fix mocks and test

* feat: allow to specify token type of JWT Profile Grant

* document JWTProfileTokenStorage

* cleanup

* rp: fix integration test

test username needed to be suffixed by issuer domain

* chore(deps): bump golang.org/x/text from 0.5.0 to 0.6.0

Bumps [golang.org/x/text](https://github.com/golang/text) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/golang/text/releases)
- [Commits](https://github.com/golang/text/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: golang.org/x/text
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* op: mock: cleanup commented code

* op: remove duplicate code

code duplication caused by merge conflict selections

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-09 17:10:22 +01:00
Tim Möhlmann
5633b5518a
Merge pull request #269 from muir/doc-client-not-cached
doc: document lack of client caching
2023-02-09 12:03:21 +02:00
David Sharnoff
d258fc4c29 document lack of client caching 2023-02-08 15:28:27 -08:00
Tim Möhlmann
d59ed71446
Merge pull request #258 from zitadel/dependabot/go_modules/golang.org/x/text-0.6.0
chore(deps): bump golang.org/x/text from 0.5.0 to 0.6.0
2023-02-06 21:23:05 +02:00
dependabot[bot]
e59b9259a7
chore(deps): bump golang.org/x/text from 0.5.0 to 0.6.0
Bumps [golang.org/x/text](https://github.com/golang/text) from 0.5.0 to 0.6.0.
- [Release notes](https://github.com/golang/text/releases)
- [Commits](https://github.com/golang/text/compare/v0.5.0...v0.6.0)

---
updated-dependencies:
- dependency-name: golang.org/x/text
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-06 18:35:36 +00:00
Tim Möhlmann
a34d7a1630
chore: add go 1.20 support (#275) 2023-02-06 11:11:11 +01:00
Tim Möhlmann
3a6c3543e7
chore: add go 1.20 support (#274) 2023-02-06 10:35:50 +01:00
Tim Möhlmann
df5a09f813
chore: switch from iouitil to io.ReadAll (#272)
removed a TODO: switch to io.ReadAll and drop go1.15 support
2023-02-06 08:29:25 +01:00
David Sharnoff
cdf2af6c2c
feat: add CanRefreshTokenInfo to support non-JWT refresh tokens (#244)
* Add an additional, optional, op.Storage interface so that refresh tokens
that are not JWTs do not cause failures when they randomly, sometimes, decrypt
without error

```go
// CanRefreshTokenInfo is an optional additional interface that Storage can support.
// Supporting CanRefreshTokenInfo is required to be able to revoke a refresh token that
// does not happen to also be a JWTs work properly.
type CanRefreshTokenInfo interface {
        // GetRefreshTokenInfo must return oidc.ErrInvalidRefreshToken when presented
	// with a token that is not a refresh token.
	GetRefreshTokenInfo(ctx context.Context, clientID string, token string) (userID string, tokenID string, err error)
}
```

* add comment suggested in code review

* review feedback: return an error defined in op rather than adding a new error to oidc

* move ErrInvalidRefresToken to op/storage.go
2023-02-06 08:27:57 +01:00
Tim Möhlmann
fa222c5efb
fix: nil pointer dereference on UserInfoAddress (#207)
* oidc: add test case to reproduce #203

Running the tests will always result in a nil pointer
dereference on UserInfoAddress.

Co-authored-by: Livio Spring <livio.a@gmail.com>

* fix: nil pointer dereference on UserInfoAddress

userinfo.UnmarshalJSON now only sets the Address field
if it was present in the json.
userinfo.GetAddress will always return a non-nil value
of UserInfoAddress to allow for safe chaining of Get functions.

Fixes #203

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
2023-02-03 11:14:04 +01:00