This repository builds a Docker Image that protects an upstream server using Okta's OpenID Connect Authorization Code
flow
- Okta Developer account
- An Open ID Connect application supporting the
Authorization Code
flow
PROXY_PASS
- The upstream to proxy authenticated requests to. Should include scheme, host, and port e.g.http://localhost:8080
CLIENT_ID
- The Client ID can be found on the 'General' tab of the Web application that you created earlier in the Okta Developer ConsoleCLIENT_SECRET
- The Client Secret be found on the 'General' tab of the Web application that you created earlier in the Okta Developer ConsoleISSUER
- Issuer is the URL of the authorization server that will perform authentication. All Developer Accounts have a 'default' authorization server. The issuer is a combination of your Org URL (found in the upper right of the console home page) and /oauth2/default. For example,https://xxxxx.oktapreview.com/oauth2/default
AUDIENCE
- The Audience can be found on the 'Settings' tab of the Authorization Server. The 'default' authorization server uses the audienceapi://default
LOGIN_REDIRECT_URL
- The Login Redirect URL can be found on the 'General' tab of the Web application that you created earlier in the Okta Developer Console
APP_POST_LOGIN_URL
- After authentication is complete, redirect to an application-specific URL. Thestate
query parameter will hold the original URL.COOKIE_DOMAIN
- Defaults to current domain only. Set in order to allow use on subdomains.COOKIE_NAME
- Defaults tookta-jwt
. The name of the cookie that holds the Authorization TokenINJECT_REFRESH_JS
- Defaults totrue
. Set tofalse
to disable injection of JavaScript that transparently refreshes Access Tokens when they are close to expiringLISTEN
- Defaults to80
. Specify another port to change the listening port number. See nginx listen for options, such as TLS and unix socketsLOCATIONS_PROTECTED
- Defaults to/
. Comma separated list of location blocks to protect before passing toPROXY_PASS
.LOCATIONS_UNPROTECTED
- Defaults is disabled. Comma separated list of location blocks that will not be protected and passed toPROXY_PASS
.PROXY_SET_HEADER_NAMES
- Default is none. Comma separated list of headers to add that will be passed upstream. Must be accompanied byPROXY_SET_HEADER_VALUES
.PROXY_SET_HEADER_VALUES
- Default is none. Comma separated list of values to associate withPROXY_SET_HEADER_NAMES
. Values are Go templates that execute against claims, for example{{.groups}}
.REQUEST_TIMEOUT
- Defaults to5
. Timeout for calling the Oktatoken
endpoint to retrieve an Authorization TokenSERVER_NAME
- Defaults to_
. See nginx server_name for options.SSO_PATH
- Defaults to/sso/
. Path for SSO error and refresh endpoints. Should include leading and trailing slashVALIDATE_CLAIMS_TEMPLATE
- Default is disabled. Go template to execute against claims, must returntrue
or1
. sprig functions are available. Example:{{if or (has "default" .groups) (has "admin" .groups)}}true{{else}}false{{end}}
X-Forwarded-User
- Contains the forwarded user's username. Comes from thesub
assertion in the Auth Token.
- Build container
./docker-build.sh
- Set environment variables in vars.env to match your deployment
- Run container
./docker-run.sh
Any files added to /etc/nginx/conf.d
will be included in the http
block.
Any content in the file /etc/nginx/includes/default-server.conf
will be included in the default server
block.
Multiple servers are supported by incrementing a number starting with 2 to select environment variables.
- Server 2
LISTEN_2
: requiredSERVER_NAME_2
: requiredPROXY_PASS_2
: requiredLOCATIONS_PROTECTED_2
: optionalLOCATIONS_UNPROTECTED_2
: optionalPROXY_SET_HEADER_NAMES_2
: optionalPROXY_SET_HEADER_VALUES_2
: optionalVALIDATE_CLAIMS_TEMPLATE_2
: optional- optionally add configuration to
/etc/nginx/includes/default-server.2.conf
- Server N
LISTEN_N
: requiredSERVER_NAME_N
: requiredPROXY_PASS_N
: requiredLOCATIONS_PROTECTED_N
: optionalLOCATIONS_UNPROTECTED_N
: optionalPROXY_SET_HEADER_NAMES_N
: optionalPROXY_SET_HEADER_VALUES_N
: optionalVALIDATE_CLAIMS_TEMPLATE_N
: optional- optionally add configuration to
/etc/nginx/includes/default-server.N.conf
Multiple servers all use the same Okta Authorization Server and the same LOGIN_REDIRECT_URL
. Multiple servers should either be on the same host with different ports, or on subdomains are all valid for COOKIE_DOMAIN
.