1
0
mirror of https://github.com/oauth2-proxy/oauth2-proxy.git synced 2025-01-08 04:03:58 +02:00
A reverse proxy that provides authentication with Google, Azure, OpenID Connect and many more identity providers.
Go to file
Braunson ce750e9b30
PKCE Support (#1541)
* Add the allowed_email_domains and the allowed_groups on the auth_request endpoint + support standard wildcard char for validation with sub-domain and email-domain.

Signed-off-by: Valentin Pichard <github@w3st.fr>

* Fix provider data initialisation

* PKCE Support

Adds Code Challenge PKCE support (RFC-7636) and partial
Authorization Server Metadata (RFC-8414) for detecting PKCE support.

- Introduces new option `--force-code-challenge-method` to force a
specific code challenge method (either `S256` or `plain`) for instances
when the server has not implemented RFC-8414 in order to detect
PKCE support on the discovery document.
- In all other cases, if the PKCE support can be determined during discovery
then the `code_challenge_methods_supported` is used and S256 is always
preferred.
- The force command line argument is helpful with some providers like Azure
who supports PKCE but does not list it in their discovery document yet.
- Initial thought was given to just always attempt PKCE since according to spec
additional URL parameters should be dropped by servers which implemented
OAuth 2, however other projects found cases in the wild where this causes 500
errors by buggy implementations.
See: https://github.com/spring-projects/spring-security/pull/7804#issuecomment-578323810
- Due to the fact that the `code_verifier` must be saved between the redirect and
callback, sessions are now created when the redirect takes place with `Authenticated: false`.
The session will be recreated and marked as `Authenticated` on callback.
- Individual provider implementations can choose to include or ignore code_challenge
and code_verifier function parameters passed to them

Note: Technically speaking `plain` is not required to be implemented since
oauth2-proxy will always be able to handle S256 and servers MUST implement
S256 support.
> If the client is capable of using "S256", it MUST use "S256", as "S256"
> is Mandatory To Implement (MTI) on the server.  Clients are permitted
> to use "plain" only if they cannot support "S256" for some technical
> reason and know via out-of-band configuration that the server supports
> "plain".
Ref: RFC-7636 Sec 4.2

oauth2-proxy will always use S256 unless the user explicitly forces `plain`.

Fixes #1361

* Address PR comments by moving pkce generation

* Make PKCE opt-in, move to using the Nonce generater for code verifier

* Make PKCE opt-in, move to using the Nonce generater for code verifier

* Encrypt CodeVerifier in CSRF Token instead of Session

- Update Dex for PKCE support
- Expose HTTPBin for further use cases

* Correct the tests

* Move code challenges into extra params

* Correct typo in code challenge method

Co-authored-by: Joel Speed <Joel.speed@hotmail.co.uk>

* Correct the extra space in docs

Co-authored-by: Joel Speed <Joel.speed@hotmail.co.uk>

* Address changelog and new line nits

* Add generated docs

Co-authored-by: Valentin Pichard <github@w3st.fr>
Co-authored-by: Joel Speed <joel.speed@hotmail.co.uk>
2022-03-13 10:08:33 +00:00
.github Ensure docs release action has correct env 2022-02-20 14:07:56 +00:00
contrib PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
docs PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
pkg PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
providers PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
testdata Rename test directory to testdata 2020-10-06 21:37:25 +09:00
tools Generate reference page in configuration 2021-01-18 09:57:44 +00:00
.dockerignore Reduce docker context to improve build times 2020-07-07 20:51:43 +01:00
.gitignore PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
.golangci.yml Skip gosec linting on tests 2020-08-09 07:55:41 -07:00
CHANGELOG.md PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
CONTRIBUTING.md Drop configure script in favour of native Makefile env and checks (#515) 2020-05-09 16:07:46 +01:00
dist.sh Update dist.sh 2022-02-17 22:59:11 +01:00
Dockerfile Update Dockerfile 2022-02-17 22:55:57 +01:00
go.mod Add DiscoveryProvider to perform OIDC discovery 2022-02-19 15:37:55 +00:00
go.sum Add DiscoveryProvider to perform OIDC discovery 2022-02-19 15:37:55 +00:00
LICENSE add MIT license for google_auth_proxy 2014-06-09 16:25:26 -04:00
main_suite_test.go Ensure errors in tests are logged to the GinkgoWriter 2021-02-10 19:50:04 +00:00
main_test.go Support for passing through URL query parameters from /oauth2/start to the ID provider's login URL. 2022-02-19 16:11:09 +00:00
main.go main: fix typo "convert-config-to-alpha" 2022-02-24 08:59:45 +01:00
MAINTAINERS Add NickMeves to MAINTAINERS 2021-01-10 10:56:01 -08:00
Makefile Update Makefile 2022-02-17 23:08:53 +01:00
nsswitch.conf Add nsswitch.conf to Docker image (#400) 2020-02-23 18:16:18 +00:00
oauthproxy_test.go PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
oauthproxy.go PKCE Support (#1541) 2022-03-13 10:08:33 +00:00
README.md Update README.md 2022-02-17 23:19:26 +01:00
RELEASE.md Migrate to oauth2-proxy/oauth2-proxy 2020-03-29 15:40:10 +01:00
SECURITY.md Add Security Policy 2021-01-16 19:47:47 +00:00
validator_test.go Add the allowed_email_domains and the allowed_groups on the auth_request endpoint + support standard wildcard char for validation with sub-domain and email-domain. 2022-02-14 18:03:20 +01:00
validator.go Add the allowed_email_domains and the allowed_groups on the auth_request endpoint + support standard wildcard char for validation with sub-domain and email-domain. 2022-02-14 18:03:20 +01:00
version.go Introduce Makefile 2019-01-04 10:58:30 +00:00
watcher_unsupported.go Initalize TLS.Config when connecting to Redis with TLS (#1296) 2021-10-19 09:17:42 +01:00
watcher.go Initalize TLS.Config when connecting to Redis with TLS (#1296) 2021-10-19 09:17:42 +01:00

OAuth2 Proxy

Build Status Go Report Card GoDoc MIT licensed Maintainability Test Coverage

A reverse proxy and static file server that provides authentication using Providers (Google, GitHub, and others) to validate accounts by email, domain or group.

Note: This repository was forked from bitly/OAuth2_Proxy on 27/11/2018. Versions v3.0.0 and up are from this fork and will have diverged from any changes in the original fork. A list of changes can be seen in the CHANGELOG.

Note: This project was formerly hosted as pusher/oauth2_proxy but has been renamed as of 29/03/2020 to oauth2-proxy/oauth2-proxy. Going forward, all images shall be available at quay.io/oauth2-proxy/oauth2-proxy and binaries will be named oauth2-proxy.

Sign In Page

Installation

  1. Choose how to deploy:

    a. Download Prebuilt Binary (current release is v7.2.1)

    b. Build with $ go get github.com/oauth2-proxy/oauth2-proxy/v7 which will put the binary in $GOROOT/bin

    c. Using the prebuilt docker image quay.io/oauth2-proxy/oauth2-proxy (AMD64, PPC64LE, ARMv6 and ARM64 tags available)

Prebuilt binaries can be validated by extracting the file and verifying it against the sha256sum.txt checksum file provided for each release starting with version v3.0.0.

sha256sum -c sha256sum.txt 2>&1 | grep OK
oauth2-proxy-x.y.z.linux-amd64: OK
  1. Select a Provider and Register an OAuth Application with a Provider
  2. Configure OAuth2 Proxy using config file, command line options, or environment variables
  3. Configure SSL or Deploy behind a SSL endpoint (example provided for Nginx)

Security

If you are running a version older than v6.0.0 we strongly recommend you please update to a current version. See open redirect vulnerability for details.

Docs

Read the docs on our Docs site.

OAuth2 Proxy Architecture

Getting Involved

If you would like to reach out to the maintainers, come talk to us in the #oauth2-proxy channel in the Gophers slack.

Contributing

Please see our Contributing guidelines. For releasing see our release creation guide.