diff --git a/README.md b/README.md index b2e6695..0f8c853 100644 --- a/README.md +++ b/README.md @@ -1,967 +1,19 @@ -
+# Identity -Type | -Name | -Logo | -Website | -
---|---|---|---|
Sponsor | -Raspberry PI Foundation | -- - | -raspberrypi.org | -
Contributor | -Kyma Project | -- - | -kyma-project.io | -
Sponsor | -Tulip | -- - | -tulip.com | -
Sponsor | -Cashdeck / All My Funds | -- - | -cashdeck.com.au | -
Contributor | -Hootsuite | -- - | -hootsuite.com | -
Adopter * | -Segment | -- - | -segment.com | -
Adopter * | -Arduino | -- - | -arduino.cc | -
Adopter * | -DataDetect | -- - | -unifiedglobalarchiving.com/data-detect/ | -
Adopter * | -Sainsbury's | -- - | -sainsburys.co.uk | -
Adopter * | -Contraste | -- - | -contraste.com | -
Adopter * | -Reyah | -- - | -reyah.eu | -
Adopter * | -Zero | -- - | -getzero.dev | -
Adopter * | -Padis | -- - | -padis.io | -
Adopter * | -Cloudbear | -- - | -cloudbear.eu | -
Adopter * | -Security Onion Solutions | -- - | -securityonionsolutions.com | -
Adopter * | -Factly | -- - | -factlylabs.com | -
Adopter * | -Nortal | -- - | -nortal.com | -
Sponsor | -OrderMyGear | -- - | -ordermygear.com | -
Sponsor | -Spiri.bo | -- - | -spiri.bo | -
Sponsor | -Strivacity | -- - | -strivacity.com | -
Adopter * | -Hanko | -- - | -hanko.io | -
Adopter * | -Rabbit | -- - | -rabbit.co.th | -
Adopter * | -inMusic | -- - | -inmusicbrands.com | -
Adopter * | -Buhta | -- - | -buhta.com | -
Adopter * | -Connctd | -- - | -connctd.com | -
Adopter * | -Paralus | -- - | -paralus.io | -
Adopter * | -TIER IV | -- - | -tier4.jp | -
Adopter * | -R2Devops | -- - | -r2devops.io | -
Adopter * | -LunaSec | -- - | -lunasec.io | -
Adopter * | -Serlo | -- - | -serlo.org | -
Adopter * | -dyrector.io | -- - | -dyrector.io | -
Adopter * | -Stackspin | -- - | -stackspin.net | -
Adopter * | -Amplitude | -- - | -amplitude.com | -
- -
- -The following OpenID profiles are certified: - -- [Basic OpenID Provider](http://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth) - (response types `code`) -- [Implicit OpenID Provider](http://openid.net/specs/openid-connect-core-1_0.html#ImplicitFlowAuth) - (response types `id_token`, `id_token+token`) -- [Hybrid OpenID Provider](http://openid.net/specs/openid-connect-core-1_0.html#HybridFlowAuth) - (response types `code+id_token`, `code+id_token+token`, `code+token`) -- [OpenID Provider Publishing Configuration Information](https://openid.net/specs/openid-connect-discovery-1_0.html) -- [Dynamic OpenID Provider](https://openid.net/specs/openid-connect-registration-1_0.html) - -To obtain certification, we deployed the -[reference user login and consent app](https://github.com/ory/hydra-login-consent-node) -(unmodified) and Ory Hydra v1.0.0. - -## Quickstart - -This section is a starter guide to working with Ory Hydra. In-depth docs are -available as well: - -- The documentation is available [here](https://www.ory.sh/docs/hydra). -- The REST API documentation is available - [here](https://www.ory.sh/docs/hydra/sdk/api). - -### Installation - -Head over to the -[Ory Developer Documentation](https://www.ory.sh/docs/hydra/install) to learn -how to install Ory Hydra on Linux, macOS, Windows, and Docker and how to build -Ory Hydra from source. - -## Ecosystem - - - -We build Ory on several guiding principles when it comes to our architecture -design: - -- Minimal dependencies -- Runs everywhere -- Scales without effort -- Minimize room for human and network errors - -Ory's architecture is designed to run best on a Container Orchestration system -such as Kubernetes, CloudFoundry, OpenShift, and similar projects. Binaries are -small (5-15MB) and available for all popular processor types (ARM, AMD64, i386) -and operating systems (FreeBSD, Linux, macOS, Windows) without system -dependencies (Java, Node, Ruby, libxml, ...). - -### Ory Kratos: Identity and User Infrastructure and Management - -[Ory Kratos](https://github.com/ory/kratos) is an API-first Identity and User -Management system that is built according to -[cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy). -It implements core use cases that almost every software application needs to -deal with: Self-service Login and Registration, Multi-Factor Authentication -(MFA/2FA), Account Recovery and Verification, Profile, and Account Management. - -### Ory Hydra: OAuth2 & OpenID Connect Server - -[Ory Hydra](https://github.com/ory/hydra) is an OpenID Certified™ OAuth2 and -OpenID Connect Provider which easily connects to any existing identity system by -writing a tiny "bridge" application. It gives absolute control over the user -interface and user experience flows. - -### Ory Oathkeeper: Identity & Access Proxy - -[Ory Oathkeeper](https://github.com/ory/oathkeeper) is a BeyondCorp/Zero Trust -Identity & Access Proxy (IAP) with configurable authentication, authorization, -and request mutation rules for your web services: Authenticate JWT, Access -Tokens, API Keys, mTLS; Check if the contained subject is allowed to perform the -request; Encode resulting content into custom headers (`X-User-ID`), JSON Web -Tokens and more! - -### Ory Keto: Access Control Policies as a Server - -[Ory Keto](https://github.com/ory/keto) is a policy decision point. It uses a -set of access control policies, similar to AWS IAM Policies, in order to -determine whether a subject (user, application, service, car, ...) is authorized -to perform a certain action on a resource. - - - -## Security - -_Why should I use Ory Hydra? It's not that hard to implement two OAuth2 -endpoints and there are numerous SDKs out there!_ - -OAuth2 and OAuth2 related specifications are over 400 written pages. -Implementing OAuth2 is easy, getting it right is hard. Ory Hydra is trusted by -companies all around the world, has a vibrant community and faces millions of -requests in production each day. Of course, we also compiled a security guide -with more details on cryptography and security concepts. Read -[the security guide now](https://www.ory.sh/docs/hydra/security-architecture). - -### Disclosing vulnerabilities - -If you think you found a security vulnerability, please refrain from posting it -publicly on the forums, the chat, or GitHub. You can find all info for -responsible disclosure in our -[security.txt](https://www.ory.sh/.well-known/security.txt). - -## Benchmarks - -Our continuous integration runs a collection of benchmarks against Ory Hydra. -You can find the results [here](https://www.ory.sh/docs/performance/hydra). - -## Telemetry - -Our services collect summarized, anonymized data that can optionally be turned -off. Click [here](https://www.ory.sh/docs/ecosystem/sqa) to learn more. - -## Documentation - -### Guide - -The full Ory Hydra documentation is available -[here](https://www.ory.sh/docs/hydra). - -### HTTP API documentation - -The HTTP API is documented [here](https://www.ory.sh/docs/hydra/sdk/api). - -### Upgrading and Changelog - -New releases might introduce breaking changes. To help you identify and -incorporate those changes, we document these changes in -[CHANGELOG.md](./CHANGELOG.md). - -### Command line documentation - -Run `hydra -h` or `hydra help`. - -### Develop - -We love all contributions! Please read our -[contribution guidelines](./CONTRIBUTING.md). - -#### Dependencies - -You need Go 1.13+ with `GO111MODULE=on` and (for the test suites): - -- Docker and Docker Compose -- Makefile -- NodeJS / npm - -It is possible to develop Ory Hydra on Windows, but please be aware that all -guides assume a Unix shell like bash or zsh. - -#### Formatting Code - -You can format all code using `make format`. Our CI checks if your code is -properly formatted. - -#### Running Tests - -There are three types of tests you can run: - -- Short tests (do not require a SQL database like PostgreSQL) -- Regular tests (do require PostgreSQL, MySQL, CockroachDB) -- End to end tests (do require databases and will use a test browser) - -All of the above tests can be run using the makefile. See the commands below. - -**Makefile commands** - -```shell -# quick tests -make quicktest - -# regular tests -make test -test-resetdb - -# end-to-end tests -make e2e -``` - -##### Short Tests - -It is recommended to use the make file to run your tests using `make quicktest` -, however, you can still use the `go test` command. - -**Please note**: - -All tests run against a sqlite in-memory database, thus it is required to use -the `-tags sqlite,json1` build tag. - -Short tests run fairly quickly. You can either test all of the code at once: - -```shell script -go test -v -failfast -short -tags sqlite,json1 ./... -``` - -or test just a specific module: - -```shell script -go test -v -failfast -short -tags sqlite,json1 ./client -``` - -or a specific test: - -```shell script -go test -v -failfast -short -tags sqlite,json1 -run ^TestName$ ./... -``` - -##### Regular Tests - -Regular tests require a database set up. Our test suite is able to work with -docker directly (using [ory/dockertest](https://github.com/ory/dockertest)) but -we encourage to use the Makefile instead. Using dockertest can bloat the number -of Docker Images on your system and are quite slow. Instead we recommend doing: - -```shell script -make test -``` - -Please be aware that `make test` recreates the databases every time you run -`make test`. This can be annoying if you are trying to fix something very -specific and need the database tests all the time. In that case we suggest that -you initialize the databases with: - -```shell script -make test-resetdb -export TEST_DATABASE_MYSQL='mysql://root:secret@(127.0.0.1:3444)/mysql?parseTime=true&multiStatements=true' -export TEST_DATABASE_POSTGRESQL='postgres://postgres:secret@127.0.0.1:3445/postgres?sslmode=disable' -export TEST_DATABASE_COCKROACHDB='cockroach://root@127.0.0.1:3446/defaultdb?sslmode=disable' -``` - -Then you can run `go test` as often as you'd like: - -```shell script -go test -p 1 ./... - -# or in a module: -cd client; go test . -``` - -#### E2E Tests - -The E2E tests use [Cypress](https://www.cypress.io) to run full browser tests. -You can execute these tests with: - -``` -make e2e -``` - -The runner will not show the Browser window, as it runs in the CI Mode -(background). That makes debugging these type of tests very difficult, but -thankfully you can run the e2e test in the browser which helps with debugging! -Just run: - -```shell script -./test/e2e/circle-ci.bash memory --watch - -# Or for the JSON Web Token Access Token strategy: -# ./test/e2e/circle-ci.bash memory-jwt --watch -``` - -or if you would like to test one of the databases: - -```shell script -make test-resetdb -export TEST_DATABASE_MYSQL='mysql://root:secret@(127.0.0.1:3444)/mysql?parseTime=true&multiStatements=true' -export TEST_DATABASE_POSTGRESQL='postgres://postgres:secret@127.0.0.1:3445/postgres?sslmode=disable' -export TEST_DATABASE_COCKROACHDB='cockroach://root@127.0.0.1:3446/defaultdb?sslmode=disable' - -# You can test against each individual database: -./test/e2e/circle-ci.bash postgres --watch -./test/e2e/circle-ci.bash memory --watch -./test/e2e/circle-ci.bash mysql --watch -# ... -``` - -Once you run the script, a Cypress window will appear. Hit the button "Run all -Specs"! - -The code for these tests is located in -[./cypress/integration](./cypress/integration) and -[./cypress/support](./cypress/support) and -[./cypress/helpers](./cypress/helpers). The website you're seeing is located in -[./test/e2e/oauth2-client](./test/e2e/oauth2-client). - -##### OpenID Connect Conformity Tests - -To run Ory Hydra against the OpenID Connect conformity suite, run - -```shell script -$ test/conformity/start.sh --build -``` - -and then in a separate shell - -```shell script -$ test/conformity/test.sh -``` - -Running these tests will take a significant amount of time which is why they are -not part of the CI pipeline. - -#### Build Docker - -You can build a development Docker Image using: - -```shell script -make docker -``` - -#### Run the Docker Compose quickstarts - -If you wish to check your code changes against any of the docker-compose -quickstart files, run: - -```shell script -make docker -docker compose -f quickstart.yml up # .... -``` - -#### Add a new migration - -1. `mkdir persistence/sql/src/YYYYMMDD000001_migration_name/` -2. Put the migration files into this directory, following the standard naming - conventions. If you wish to execute different parts of a migration in - separate transactions, add split marks (lines with the text `--split`) where - desired. Why this might be necessary is explained in - https://github.com/gobuffalo/fizz/issues/104. -3. Run `make persistence/sql/migrations/