Add OAuth filter (#11268)
This was written by Derek Argueta originally. Some more work might be needed to make it more generic. Risk Level: low, new filter Testing: unit tests included Docs Changes: filter docs added Signed-off-by: Snow Pettersen <snowp@lyft.com> Co-authored-by: Derek Argueta <darguetap@gmail.com> Mirrored from https://github.com/envoyproxy/envoy @ c6bfd7f9f52468d576781a9b1fe9ea5d3f9086c9master-ci-test
parent
46837a9f4e
commit
93b9c9e5d9
6 changed files with 208 additions and 0 deletions
@ -0,0 +1,15 @@ |
||||
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py. |
||||
|
||||
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_package( |
||||
deps = [ |
||||
"//envoy/config/core/v3:pkg", |
||||
"//envoy/config/route/v3:pkg", |
||||
"//envoy/extensions/transport_sockets/tls/v3:pkg", |
||||
"//envoy/type/matcher/v3:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,83 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.filters.http.oauth2.v3alpha; |
||||
|
||||
import "envoy/config/core/v3/http_uri.proto"; |
||||
import "envoy/config/route/v3/route_components.proto"; |
||||
import "envoy/extensions/transport_sockets/tls/v3/secret.proto"; |
||||
import "envoy/type/matcher/v3/path.proto"; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "udpa/annotations/versioning.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.filters.http.oauth2.v3alpha"; |
||||
option java_outer_classname = "OauthProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).work_in_progress = true; |
||||
option (udpa.annotations.file_status).package_version_status = ACTIVE; |
||||
|
||||
// [#protodoc-title: OAuth] |
||||
// OAuth :ref:`configuration overview <config_http_filters_oauth>`. |
||||
// [#extension: envoy.filters.http.oauth2] |
||||
// |
||||
|
||||
message OAuth2Credentials { |
||||
// The client_id to be used in the authorize calls. This value will be URL encoded when sent to the OAuth server. |
||||
string client_id = 1 [(validate.rules).string = {min_bytes: 1}]; |
||||
|
||||
// The secret used to retrieve the access token. This value will be URL encoded when sent to the OAuth server. |
||||
transport_sockets.tls.v3.SdsSecretConfig token_secret = 2 |
||||
[(validate.rules).message = {required: true}]; |
||||
|
||||
// Configures how the secret token should be created. |
||||
oneof token_formation { |
||||
option (validate.required) = true; |
||||
|
||||
// If present, the secret token will be a HMAC using the provided secret. |
||||
transport_sockets.tls.v3.SdsSecretConfig hmac_secret = 3 |
||||
[(validate.rules).message = {required: true}]; |
||||
} |
||||
} |
||||
|
||||
// OAuth config |
||||
// |
||||
// [#next-free-field: 9] |
||||
message OAuth2Config { |
||||
// Endpoint on the authorization server to retrieve the access token from. |
||||
config.core.v3.HttpUri token_endpoint = 1; |
||||
|
||||
// The endpoint redirect to for authorization in response to unauthorized requests. |
||||
string authorization_endpoint = 2 [(validate.rules).string = {min_bytes: 1}]; |
||||
|
||||
// Credentials used for OAuth. |
||||
OAuth2Credentials credentials = 3 [(validate.rules).message = {required: true}]; |
||||
|
||||
// The redirect URI passed to the authorization endpoint. Supports header formatting |
||||
// tokens. For more information, including details on header value syntax, see the |
||||
// documentation on :ref:`custom request headers <config_http_conn_man_headers_custom_request_headers>`. |
||||
// |
||||
// This URI should not contain any query parameters. |
||||
string redirect_uri = 4 [(validate.rules).string = {min_bytes: 1}]; |
||||
|
||||
// Matching criteria used to determine whether a path appears to be the result of a redirect from the authorization server. |
||||
type.matcher.v3.PathMatcher redirect_path_matcher = 5 |
||||
[(validate.rules).message = {required: true}]; |
||||
|
||||
// The path to sign a user out, clearing their credential cookies. |
||||
type.matcher.v3.PathMatcher signout_path = 6 [(validate.rules).message = {required: true}]; |
||||
|
||||
// Forward the OAuth token as a Bearer to upstream web service. |
||||
bool forward_bearer_token = 7; |
||||
|
||||
// Any request that matches any of the provided matchers will be passed through without OAuth validation. |
||||
repeated config.route.v3.HeaderMatcher pass_through_matcher = 8; |
||||
} |
||||
|
||||
// Filter config. |
||||
message OAuth2 { |
||||
// Leave this empty to disable OAuth2 for a specific route, using per filter config. |
||||
OAuth2Config config = 1; |
||||
} |
@ -0,0 +1,16 @@ |
||||
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py. |
||||
|
||||
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package") |
||||
|
||||
licenses(["notice"]) # Apache 2 |
||||
|
||||
api_proto_package( |
||||
deps = [ |
||||
"//envoy/config/core/v4alpha:pkg", |
||||
"//envoy/config/route/v4alpha:pkg", |
||||
"//envoy/extensions/filters/http/oauth2/v3alpha:pkg", |
||||
"//envoy/extensions/transport_sockets/tls/v4alpha:pkg", |
||||
"//envoy/type/matcher/v4alpha:pkg", |
||||
"@com_github_cncf_udpa//udpa/annotations:pkg", |
||||
], |
||||
) |
@ -0,0 +1,92 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.filters.http.oauth2.v4alpha; |
||||
|
||||
import "envoy/config/core/v4alpha/http_uri.proto"; |
||||
import "envoy/config/route/v4alpha/route_components.proto"; |
||||
import "envoy/extensions/transport_sockets/tls/v4alpha/secret.proto"; |
||||
import "envoy/type/matcher/v4alpha/path.proto"; |
||||
|
||||
import "google/protobuf/duration.proto"; |
||||
|
||||
import "udpa/annotations/status.proto"; |
||||
import "udpa/annotations/versioning.proto"; |
||||
import "validate/validate.proto"; |
||||
|
||||
option java_package = "io.envoyproxy.envoy.extensions.filters.http.oauth2.v4alpha"; |
||||
option java_outer_classname = "OauthProto"; |
||||
option java_multiple_files = true; |
||||
option (udpa.annotations.file_status).work_in_progress = true; |
||||
option (udpa.annotations.file_status).package_version_status = NEXT_MAJOR_VERSION_CANDIDATE; |
||||
|
||||
// [#protodoc-title: OAuth] |
||||
// OAuth :ref:`configuration overview <config_http_filters_oauth>`. |
||||
// [#extension: envoy.filters.http.oauth2] |
||||
// |
||||
|
||||
message OAuth2Credentials { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.filters.http.oauth2.v3alpha.OAuth2Credentials"; |
||||
|
||||
// The client_id to be used in the authorize calls. This value will be URL encoded when sent to the OAuth server. |
||||
string client_id = 1 [(validate.rules).string = {min_bytes: 1}]; |
||||
|
||||
// The secret used to retrieve the access token. This value will be URL encoded when sent to the OAuth server. |
||||
transport_sockets.tls.v4alpha.SdsSecretConfig token_secret = 2 |
||||
[(validate.rules).message = {required: true}]; |
||||
|
||||
// Configures how the secret token should be created. |
||||
oneof token_formation { |
||||
option (validate.required) = true; |
||||
|
||||
// If present, the secret token will be a HMAC using the provided secret. |
||||
transport_sockets.tls.v4alpha.SdsSecretConfig hmac_secret = 3 |
||||
[(validate.rules).message = {required: true}]; |
||||
} |
||||
} |
||||
|
||||
// OAuth config |
||||
// |
||||
// [#next-free-field: 9] |
||||
message OAuth2Config { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.filters.http.oauth2.v3alpha.OAuth2Config"; |
||||
|
||||
// Endpoint on the authorization server to retrieve the access token from. |
||||
config.core.v4alpha.HttpUri token_endpoint = 1; |
||||
|
||||
// The endpoint redirect to for authorization in response to unauthorized requests. |
||||
string authorization_endpoint = 2 [(validate.rules).string = {min_bytes: 1}]; |
||||
|
||||
// Credentials used for OAuth. |
||||
OAuth2Credentials credentials = 3 [(validate.rules).message = {required: true}]; |
||||
|
||||
// The redirect URI passed to the authorization endpoint. Supports header formatting |
||||
// tokens. For more information, including details on header value syntax, see the |
||||
// documentation on :ref:`custom request headers <config_http_conn_man_headers_custom_request_headers>`. |
||||
// |
||||
// This URI should not contain any query parameters. |
||||
string redirect_uri = 4 [(validate.rules).string = {min_bytes: 1}]; |
||||
|
||||
// Matching criteria used to determine whether a path appears to be the result of a redirect from the authorization server. |
||||
type.matcher.v4alpha.PathMatcher redirect_path_matcher = 5 |
||||
[(validate.rules).message = {required: true}]; |
||||
|
||||
// The path to sign a user out, clearing their credential cookies. |
||||
type.matcher.v4alpha.PathMatcher signout_path = 6 [(validate.rules).message = {required: true}]; |
||||
|
||||
// Forward the OAuth token as a Bearer to upstream web service. |
||||
bool forward_bearer_token = 7; |
||||
|
||||
// Any request that matches any of the provided matchers will be passed through without OAuth validation. |
||||
repeated config.route.v4alpha.HeaderMatcher pass_through_matcher = 8; |
||||
} |
||||
|
||||
// Filter config. |
||||
message OAuth2 { |
||||
option (udpa.annotations.versioning).previous_message_type = |
||||
"envoy.extensions.filters.http.oauth2.v3alpha.OAuth2"; |
||||
|
||||
// Leave this empty to disable OAuth2 for a specific route, using per filter config. |
||||
OAuth2Config config = 1; |
||||
} |
Loading…
Reference in new issue