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