| // Copyright 2024 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; | |
| } | |