123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- // Copyright 2023 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- syntax = "proto3";
- package google.api;
- option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
- option java_multiple_files = true;
- option java_outer_classname = "AuthProto";
- option java_package = "com.google.api";
- option objc_class_prefix = "GAPI";
- // `Authentication` defines the authentication configuration for API methods
- // provided by an API service.
- //
- // Example:
- //
- // name: calendar.googleapis.com
- // authentication:
- // providers:
- // - id: google_calendar_auth
- // jwks_uri: https://www.googleapis.com/oauth2/v1/certs
- // issuer: https://securetoken.google.com
- // rules:
- // - selector: "*"
- // requirements:
- // provider_id: google_calendar_auth
- // - selector: google.calendar.Delegate
- // oauth:
- // canonical_scopes: https://www.googleapis.com/auth/calendar.read
- message Authentication {
- // A list of authentication rules that apply to individual API methods.
- //
- // **NOTE:** All service configuration rules follow "last one wins" order.
- repeated AuthenticationRule rules = 3;
- // Defines a set of authentication providers that a service supports.
- repeated AuthProvider providers = 4;
- }
- // Authentication rules for the service.
- //
- // By default, if a method has any authentication requirements, every request
- // must include a valid credential matching one of the requirements.
- // It's an error to include more than one kind of credential in a single
- // request.
- //
- // If a method doesn't have any auth requirements, request credentials will be
- // ignored.
- message AuthenticationRule {
- // Selects the methods to which this rule applies.
- //
- // Refer to [selector][google.api.DocumentationRule.selector] for syntax
- // details.
- string selector = 1;
- // The requirements for OAuth credentials.
- OAuthRequirements oauth = 2;
- // If true, the service accepts API keys without any other credential.
- // This flag only applies to HTTP and gRPC requests.
- bool allow_without_credential = 5;
- // Requirements for additional authentication providers.
- repeated AuthRequirement requirements = 7;
- }
- // Specifies a location to extract JWT from an API request.
- message JwtLocation {
- oneof in {
- // Specifies HTTP header name to extract JWT token.
- string header = 1;
- // Specifies URL query parameter name to extract JWT token.
- string query = 2;
- // Specifies cookie name to extract JWT token.
- string cookie = 4;
- }
- // The value prefix. The value format is "value_prefix{token}"
- // Only applies to "in" header type. Must be empty for "in" query type.
- // If not empty, the header value has to match (case sensitive) this prefix.
- // If not matched, JWT will not be extracted. If matched, JWT will be
- // extracted after the prefix is removed.
- //
- // For example, for "Authorization: Bearer {JWT}",
- // value_prefix="Bearer " with a space at the end.
- string value_prefix = 3;
- }
- // Configuration for an authentication provider, including support for
- // [JSON Web Token
- // (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
- message AuthProvider {
- // The unique identifier of the auth provider. It will be referred to by
- // `AuthRequirement.provider_id`.
- //
- // Example: "bookstore_auth".
- string id = 1;
- // Identifies the principal that issued the JWT. See
- // https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1
- // Usually a URL or an email address.
- //
- // Example: https://securetoken.google.com
- // Example: 1234567-compute@developer.gserviceaccount.com
- string issuer = 2;
- // URL of the provider's public key set to validate signature of the JWT. See
- // [OpenID
- // Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
- // Optional if the key set document:
- // - can be retrieved from
- // [OpenID
- // Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)
- // of the issuer.
- // - can be inferred from the email domain of the issuer (e.g. a Google
- // service account).
- //
- // Example: https://www.googleapis.com/oauth2/v1/certs
- string jwks_uri = 3;
- // The list of JWT
- // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
- // that are allowed to access. A JWT containing any of these audiences will
- // be accepted. When this setting is absent, JWTs with audiences:
- // - "https://[service.name]/[google.protobuf.Api.name]"
- // - "https://[service.name]/"
- // will be accepted.
- // For example, if no audiences are in the setting, LibraryService API will
- // accept JWTs with the following audiences:
- // -
- // https://library-example.googleapis.com/google.example.library.v1.LibraryService
- // - https://library-example.googleapis.com/
- //
- // Example:
- //
- // audiences: bookstore_android.apps.googleusercontent.com,
- // bookstore_web.apps.googleusercontent.com
- string audiences = 4;
- // Redirect URL if JWT token is required but not present or is expired.
- // Implement authorizationUrl of securityDefinitions in OpenAPI spec.
- string authorization_url = 5;
- // Defines the locations to extract the JWT. For now it is only used by the
- // Cloud Endpoints to store the OpenAPI extension [x-google-jwt-locations]
- // (https://cloud.google.com/endpoints/docs/openapi/openapi-extensions#x-google-jwt-locations)
- //
- // JWT locations can be one of HTTP headers, URL query parameters or
- // cookies. The rule is that the first match wins.
- //
- // If not specified, default to use following 3 locations:
- // 1) Authorization: Bearer
- // 2) x-goog-iap-jwt-assertion
- // 3) access_token query parameter
- //
- // Default locations can be specified as followings:
- // jwt_locations:
- // - header: Authorization
- // value_prefix: "Bearer "
- // - header: x-goog-iap-jwt-assertion
- // - query: access_token
- repeated JwtLocation jwt_locations = 6;
- }
- // OAuth scopes are a way to define data and permissions on data. For example,
- // there are scopes defined for "Read-only access to Google Calendar" and
- // "Access to Cloud Platform". Users can consent to a scope for an application,
- // giving it permission to access that data on their behalf.
- //
- // OAuth scope specifications should be fairly coarse grained; a user will need
- // to see and understand the text description of what your scope means.
- //
- // In most cases: use one or at most two OAuth scopes for an entire family of
- // products. If your product has multiple APIs, you should probably be sharing
- // the OAuth scope across all of those APIs.
- //
- // When you need finer grained OAuth consent screens: talk with your product
- // management about how developers will use them in practice.
- //
- // Please note that even though each of the canonical scopes is enough for a
- // request to be accepted and passed to the backend, a request can still fail
- // due to the backend requiring additional scopes or permissions.
- message OAuthRequirements {
- // The list of publicly documented OAuth scopes that are allowed access. An
- // OAuth token containing any of these scopes will be accepted.
- //
- // Example:
- //
- // canonical_scopes: https://www.googleapis.com/auth/calendar,
- // https://www.googleapis.com/auth/calendar.read
- string canonical_scopes = 1;
- }
- // User-defined authentication requirements, including support for
- // [JSON Web Token
- // (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
- message AuthRequirement {
- // [id][google.api.AuthProvider.id] from authentication provider.
- //
- // Example:
- //
- // provider_id: bookstore_auth
- string provider_id = 1;
- // NOTE: This will be deprecated soon, once AuthProvider.audiences is
- // implemented and accepted in all the runtime components.
- //
- // The list of JWT
- // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
- // that are allowed to access. A JWT containing any of these audiences will
- // be accepted. When this setting is absent, only JWTs with audience
- // "https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]"
- // will be accepted. For example, if no audiences are in the setting,
- // LibraryService API will only accept JWTs with the following audience
- // "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
- //
- // Example:
- //
- // audiences: bookstore_android.apps.googleusercontent.com,
- // bookstore_web.apps.googleusercontent.com
- string audiences = 2;
- }
|