Commit graph

129 commits

Author SHA1 Message Date
Livio Amstutz
7dd0ea5780
update go module version to v2 2022-04-22 16:00:02 +02:00
Livio Amstutz
58e1e53c6b
fix mocks 2022-04-22 15:05:50 +02:00
Livio Amstutz
a27ba09872
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
2022-04-22 14:23:29 +02:00
dependabot[bot]
ab76b3518f
chore(deps): bump github.com/caos/logging from 0.0.2 to 0.3.1 (#159)
* chore(deps): bump github.com/caos/logging from 0.0.2 to 0.3.1

Bumps [github.com/caos/logging](https://github.com/caos/logging) from 0.0.2 to 0.3.1.
- [Release notes](https://github.com/caos/logging/releases)
- [Changelog](https://github.com/caos/logging/blob/master/.releaserc.js)
- [Commits](https://github.com/caos/logging/compare/v0.0.2...v0.3.1)

---
updated-dependencies:
- dependency-name: github.com/caos/logging
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* update logging

* update logging

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
2022-03-16 11:14:57 +01:00
Livio Amstutz
c07557be02
feat: build the redirect after a successful login with AuthCallbackURL function (#164) 2022-03-16 10:55:29 +01:00
Livio Amstutz
e39146c98e fix: ensure signer has key on OP creation 2022-01-31 07:27:52 +01:00
Livio Amstutz
eb10752e48
feat: Token Revocation, Request Object and OP Certification (#130)
FEATURES (and FIXES):
- support OAuth 2.0 Token Revocation [RFC 7009](https://datatracker.ietf.org/doc/html/rfc7009)
- handle request object using `request` parameter [OIDC Core 1.0 Request Object](https://openid.net/specs/openid-connect-core-1_0.html#RequestObject)
- handle response mode
- added some information to the discovery endpoint:
  - revocation_endpoint (added with token revocation) 
  - revocation_endpoint_auth_methods_supported (added with token revocation)
  - revocation_endpoint_auth_signing_alg_values_supported (added with token revocation)
  - token_endpoint_auth_signing_alg_values_supported (was missing)
  - introspection_endpoint_auth_signing_alg_values_supported (was missing)
  - request_object_signing_alg_values_supported (added with request object)
  - request_parameter_supported (added with request object)
 - fixed `removeUserinfoScopes ` now returns the scopes without "userinfo" scopes (profile, email, phone, addedd) [source diff](https://github.com/caos/oidc/pull/130/files#diff-fad50c8c0f065d4dbc49d6c6a38f09c992c8f5d651a479ba00e31b500543559eL170-R171)
- improved error handling (pkg/oidc/error.go) and fixed some wrong OAuth errors (e.g. `invalid_grant` instead of `invalid_request`)
- improved MarshalJSON and added MarshalJSONWithStatus
- removed deprecated PEM decryption from `BytesToPrivateKey`  [source diff](https://github.com/caos/oidc/pull/130/files#diff-fe246e428e399ccff599627c71764de51387b60b4df84c67de3febd0954e859bL11-L19)
- NewAccessTokenVerifier now uses correct (internal) `accessTokenVerifier` [source diff](https://github.com/caos/oidc/pull/130/files#diff-3a01c7500ead8f35448456ef231c7c22f8d291710936cac91de5edeef52ffc72L52-R52)

BREAKING CHANGE:
- move functions from `utils` package into separate packages
- added various methods to the (OP) `Configuration` interface [source diff](https://github.com/caos/oidc/pull/130/files#diff-2538e0dfc772fdc37f057aecd6fcc2943f516c24e8be794cce0e368a26d20a82R19-R32)
- added revocationEndpoint to `WithCustomEndpoints ` [source diff](https://github.com/caos/oidc/pull/130/files#diff-19ae13a743eb7cebbb96492798b1bec556673eb6236b1387e38d722900bae1c3L355-R391)
- remove unnecessary context parameter from JWTProfileExchange [source diff](https://github.com/caos/oidc/pull/130/files#diff-4ed8f6affa4a9631fa8a034b3d5752fbb6a819107141aae00029014e950f7b4cL14)
2021-11-02 13:21:35 +01:00
Livio Amstutz
a63fbee93d
fix: improve JWS and key verification (#128)
* fix: improve JWS and key verification

* fix: get remote keys if no cached key matches

* fix: get remote keys if no cached key matches

* fix exactMatch

* fix exactMatch

* chore: change default branch name in .releaserc.js
2021-09-14 15:13:44 +02:00
Beardo Moore
581885afb1
task: Ease dev host name constraints
This changes the requirements for a issuer hostname to allow anything
that is `http`. The reason for this is because the user of the library
already has to make a conscious decision to set `CAOS_OIDC_DEV` so they
should already understand the risks of not using `https`. The primary
motivation for this change is to allow IdPs to be created in a
containerized integration test environment. Specifically setting up a
docker compose file that starts all parts of the system with a test IdP
using this library where the DNS name will not be `localhost`.
2021-08-26 20:32:51 +00:00
Livio Amstutz
1132c9d93d
fix: removeUserinfoScopes return new slice (without manipulating passed one) (#110) 2021-07-21 08:27:38 +02:00
Livio Amstutz
8a35b89815
fix: supported ui locales from config (#107) 2021-07-09 09:20:03 +02:00
Livio Amstutz
58e27e8073 simplify KeyProvider interface 2021-06-30 14:10:38 +02:00
Livio Amstutz
0b446618c7 custom claims for assertion and jwt profile request 2021-06-23 14:01:31 +02:00
Livio Amstutz
e9fc710b1f Merge branch 'master' into jwt-profile-storage
# Conflicts:
#	pkg/op/verifier_jwt_profile.go
2021-06-23 13:51:20 +02:00
Livio Amstutz
850faa159d
fix: rp verification process (#95)
* fix: rp verification process

* types

* comments

* fix cli client
2021-06-23 11:08:54 +02:00
Livio Amstutz
39fef3e7fb fix: simplify JWTProfileVerifier interface 2021-06-21 14:04:38 +02:00
Livio Amstutz
400f5c4de4
fix: parse max_age and prompt correctly (and change scope type) (#105)
* fix: parse max_age and prompt correctly (and change scope type)

* remove unnecessary omitempty
2021-06-16 08:34:01 +02:00
Livio Amstutz
3e336a4075
fix: check refresh token grant type (#100) 2021-05-31 11:35:03 +02:00
Livio Amstutz
14faebbb77 fix: check grant types and add refresh token to discovery 2021-05-27 13:44:11 +02:00
Livio Amstutz
d362dd7546 handle error 2021-05-11 15:20:22 +02:00
Livio Amstutz
90b87289cb
Update pkg/op/token_code.go
Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com>
2021-05-11 15:17:10 +02:00
Livio Amstutz
2a11a1979e rename storage methods and fix mocks 2021-05-11 10:48:11 +02:00
Livio Amstutz
3a46908051 Merge branch 'master' into refresh-token 2021-05-11 10:27:43 +02:00
Livio Amstutz
be04244212 amr and scopes 2021-05-11 10:26:25 +02:00
Livio Amstutz
540a7bd7be improve Loopback check 2021-04-29 12:43:21 +02:00
Livio Amstutz
5119d7aea3 begin refresh token 2021-04-29 09:20:01 +02:00
Livio Amstutz
72fc86164c fix: allow loopback redirect_uri for native apps 2021-04-26 14:31:26 +02:00
Livio Amstutz
a2601f1584
fix: return error when delegating user in jwt profile request (#94) 2021-04-23 11:53:03 +02:00
Livio Amstutz
8f6e2c5974 chore: improve signer log messages 2021-03-05 07:53:35 +01:00
Livio Amstutz
d7d7daab2d fix: encoding of basic auth header values 2021-03-05 07:44:37 +01:00
Elio Bischof
f2f509a522
fix: wrap original fetch key error 2021-03-02 23:58:34 +01:00
Livio Amstutz
e1f0456228 merge 2021-02-22 14:57:15 +01:00
Livio Amstutz
97a567f554 Merge branch 'master' into signingkey
# Conflicts:
#	pkg/op/mock/storage.mock.go
2021-02-22 14:56:37 +01:00
Livio Amstutz
1518c843de
feat: token introspection (#83)
* introspect

* introspect and client assertion

* introspect and client assertion

* scopes

* token introspection

* introspect

* refactoring

* fixes

* clenaup

* Update example/internal/mock/storage.go

Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com>

* clenaup

Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com>
2021-02-15 13:43:50 +01:00
Livio Amstutz
1049c44c3e Merge remote-tracking branch 'origin/token-introspection' into signingkey
# Conflicts:
#	pkg/op/mock/storage.mock.go
#	pkg/op/storage.go
2021-02-12 13:02:04 +01:00
Livio Amstutz
5678693d44 clenaup 2021-02-12 12:52:33 +01:00
Livio Amstutz
0c7b2605bd clenaup 2021-02-12 07:02:10 +01:00
Livio Amstutz
01ff740f4e fixes 2021-02-12 06:47:16 +01:00
Livio Amstutz
0ca2370d48 refactoring 2021-02-11 17:38:58 +01:00
Livio Amstutz
138da8a208 introspect 2021-02-10 16:42:01 +01:00
Livio Amstutz
345fc7e837 token introspection 2021-02-03 10:42:01 +01:00
Livio Amstutz
4b426c899a scopes 2021-02-02 11:41:50 +01:00
Livio Amstutz
960be5af1f introspect and client assertion 2021-02-01 17:17:40 +01:00
Livio Amstutz
50ab51bb46 introspect and client assertion 2021-01-28 08:41:36 +01:00
Livio Amstutz
a1a21f0d59 introspect 2021-01-08 15:01:23 +01:00
Livio Amstutz
b23f37f7eb fix: clock skew when using jwt profile 2020-12-21 21:04:07 +01:00
Livio Amstutz
b2f23dc5b7 Merge branch 'master' into signingkey 2020-12-16 08:01:37 +01:00
Fabi
27f3bc0f4a
fix: change callbackpath (#74)
* fix: append client id to aud

* handle new callback path

Co-authored-by: Livio Amstutz <livio.a@gmail.com>
2020-11-30 11:21:09 +01:00
Livio Amstutz
36800145d6 renaming 2020-11-26 16:12:27 +01:00
Livio Amstutz
24120554e5 feat: add clock skew and option to put userinfo (profile, email, phone, address) into id_token 2020-11-26 15:46:08 +01:00