Skip to main content

ory proxy

ory proxy

Run your app and Ory on the same domain using a reverse proxy

Synopsis

Allows running your app and Ory on the same domain by starting a reverse proxy that runs in front of your application. This proxy works both in development and in production, for example when deploying a React, NodeJS, Java, PHP, ... app to a server / the cloud or when developing it locally on your machine.

The first argument application-url points to the location of your application. The Ory Proxy will pass all traffic through to this URL.

$ ory proxy --project <your-project-slug> https://www.example.org
$ ORY_PROJECT_SLUG=<your-project-slug> ory proxy http://localhost:3000

Connecting to Ory

Before you start, you need to have a running Ory Cloud project. You can create one with the following command:

$ ory create project --name "Command Line Project"

Pass the project's slug as a flag to the proxy command:

$ ory proxy --project <your-project-slug> ...
$ ORY_PROJECT_SLUG=<your-project-slug> ory proxy ...

Developing Locally

When developing locally we recommend to use the --dev flag, which uses a lax security setting:

$ ory proxy --dev \
--project <your-project-slug> \
http://localhost:3000

The first argument application-url points to the location of your application. If you are running the proxy and your app on the same host, this could be localhost. All traffic arriving at the Ory Proxy will be passed through to this URL.

The second argument [publish-url] is optional and only needed when going to production. It refers to the public URL of your application (e.g. https://www.example.org).

If [publish-url] is not set, it will default to the default host and port this proxy listens on:

http://localhost:4000

Running on a Server

To go to production set up a custom domain (CNAME) for Ory. If you can not set up a custom domain - for example because you are developing a staging environment - using the Ory Proxy is an alternative.

You must set the [publish-url] if you are not using the Ory Proxy in locally or in development:

$ ory proxy \
--project <your-project-slug> \
http://localhost:3000 \
https://example.org

Please note that you can not set a path in the [publish-url]!

Ports

Per default, the proxy listens on port 4000. If you want to listen on another port, use the port flag:

$ ory proxy --port 8080  --project <your-project-slug> \
http://localhost:3000 \
https://example.org

If your public URL is available on a non-standard HTTP/HTTPS port, you can set that port in the [publish-url]:

$ ory proxy --project <your-project-slug> \
http://localhost:3000 \
https://example.org:1234

Multiple Domains

If this proxy runs on a subdomain, and you want Ory's cookies (e.g. the session cookie) to be available on all of your domain, you can use the following CLI flag to customize the cookie domain. You will also need to allow your subdomains in the CORS headers:

$ ory proxy --project <your-project-slug> \
--cookie-domain example.org \
--allowed-cors-origins https://www.example.org \
--allowed-cors-origins https://api.example.org \
http://127.0.0.1:3000 \
https://ory.example.org

Redirects

Per default all default redirects will go to to [publish-url]. You can change this behavior using the --default-redirect-url flag:

$ ory --project <your-project-slug> \
--default-redirect-url /welcome \
http://127.0.0.1:3000 \
https://ory.example.org

Now, all redirects happening e.g. after login will point to /welcome instead of / unless you have specified custom redirects in your Ory configuration or in the flow's ?return_to= query parameter.

JSON Web Token

If the request is not authenticated, the HTTP Authorization Header will be empty:

GET / HTTP/1.1
Host: localhost:3000

If the request was authenticated, a JSON Web Token can be sent in the HTTP Authorization Header containing the Ory Session:

GET / HTTP/1.1
Host: localhost:3000
Authorization: Bearer the-json-web-token

The JSON Web Token claims contain:

  • The "sub" field which is set to the Ory Identity ID.
  • The "session" field which contains the full Ory Session.

The JSON Web Token is signed using the ES256 algorithm. The public key can be found by fetching the /.ory/jwks.json path when calling the proxy - for example: http://127.0.0.1:4000/.ory/jwks.json

An example payload of the JSON Web Token is:

{
"id": "821f5a53-a0b3-41fa-9c62-764560fa4406",
"active": true,
"expires_at": "2021-02-25T09:25:37.929792Z",
"authenticated_at": "2021-02-24T09:25:37.931774Z",
"issued_at": "2021-02-24T09:25:37.929813Z",
"identity": {
"id": "18aafd3e-b00c-4b19-81c8-351e38705126",
"schema_id": "default",
"schema_url": "https://example.projects.oryapis.com/api/kratos/public/schemas/default",
"traits": {
"email": "foo@bar",
// ... your other identity traits
}
}
}
ory proxy application-url [publish-url] [flags]

Examples

ory proxy http://localhost:3000 --dev
ory proxy http://localhost:3000 https://app.example.com \
--allowed-cors-origins https://www.example.org \
--allowed-cors-origins https://api.example.org \
--allowed-cors-origins https://www.another-app.com

Options

      --allowed-cors-origins strings   A list of allowed CORS origins. Wildcards are allowed.
-c, --config string Path to the Ory Cloud configuration file.
--cookie-domain string Set a dedicated cookie domain.
--debug Use this flag to debug, for example, CORS requests.
--default-redirect-url string Set the URL to redirect to per default after e.g. login or account creation.
--dev Use this flag when developing locally.
-h, --help help for proxy
--no-jwt Do not create a JWT from the Ory Kratos Session. Useful if you need fast start up times of the Ory Proxy.
--open Open the browser when the proxy starts.
--port int The port the proxy should listen on. (default 4000)
--project string The slug of your Ory Cloud Project.
-q, --quiet Be quiet with output printing.
--rewrite-host Use this flag to rewrite the host header to the upstream host.
-y, --yes Confirm all dialogs with yes.

SEE ALSO

  • ory - The ORY CLI