|  | // Copyright 2017 Google Inc. | 
|  | // | 
|  | // 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; | 
|  |  | 
|  | import "google/api/annotations.proto"; | 
|  |  | 
|  | 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 an API. | 
|  | // | 
|  | // Example for an API targeted for external use: | 
|  | // | 
|  | //     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 | 
|  | 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; | 
|  |  | 
|  | // Whether to allow requests without a credential. The credential can be | 
|  | // an OAuth token, Google cookies (first-party auth) or EndUserCreds. | 
|  | // | 
|  | // For requests without credentials, if the service control environment is | 
|  | // specified, each incoming request **must** be associated with a service | 
|  | // consumer. This can be done by passing an API key that belongs to a consumer | 
|  | // project. | 
|  | bool allow_without_credential = 5; | 
|  |  | 
|  | // Requirements for additional authentication providers. | 
|  | repeated AuthRequirement requirements = 7; | 
|  | } | 
|  |  | 
|  | // Configuration for an anthentication 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, 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 = 4; | 
|  | } | 
|  |  | 
|  | // 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; | 
|  | } |