| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 | // 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.readmessage 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;}
 |