1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.api; 18 19option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig"; 20option java_multiple_files = true; 21option java_outer_classname = "AuthProto"; 22option java_package = "com.google.api"; 23option objc_class_prefix = "GAPI"; 24 25// `Authentication` defines the authentication configuration for API methods 26// provided by an API service. 27// 28// Example: 29// 30// name: calendar.googleapis.com 31// authentication: 32// providers: 33// - id: google_calendar_auth 34// jwks_uri: https://www.googleapis.com/oauth2/v1/certs 35// issuer: https://securetoken.google.com 36// rules: 37// - selector: "*" 38// requirements: 39// provider_id: google_calendar_auth 40// - selector: google.calendar.Delegate 41// oauth: 42// canonical_scopes: https://www.googleapis.com/auth/calendar.read 43message Authentication { 44 // A list of authentication rules that apply to individual API methods. 45 // 46 // **NOTE:** All service configuration rules follow "last one wins" order. 47 repeated AuthenticationRule rules = 3; 48 49 // Defines a set of authentication providers that a service supports. 50 repeated AuthProvider providers = 4; 51} 52 53// Authentication rules for the service. 54// 55// By default, if a method has any authentication requirements, every request 56// must include a valid credential matching one of the requirements. 57// It's an error to include more than one kind of credential in a single 58// request. 59// 60// If a method doesn't have any auth requirements, request credentials will be 61// ignored. 62message AuthenticationRule { 63 // Selects the methods to which this rule applies. 64 // 65 // Refer to [selector][google.api.DocumentationRule.selector] for syntax 66 // details. 67 string selector = 1; 68 69 // The requirements for OAuth credentials. 70 OAuthRequirements oauth = 2; 71 72 // If true, the service accepts API keys without any other credential. 73 // This flag only applies to HTTP and gRPC requests. 74 bool allow_without_credential = 5; 75 76 // Requirements for additional authentication providers. 77 repeated AuthRequirement requirements = 7; 78} 79 80// Specifies a location to extract JWT from an API request. 81message JwtLocation { 82 oneof in { 83 // Specifies HTTP header name to extract JWT token. 84 string header = 1; 85 86 // Specifies URL query parameter name to extract JWT token. 87 string query = 2; 88 89 // Specifies cookie name to extract JWT token. 90 string cookie = 4; 91 } 92 93 // The value prefix. The value format is "value_prefix{token}" 94 // Only applies to "in" header type. Must be empty for "in" query type. 95 // If not empty, the header value has to match (case sensitive) this prefix. 96 // If not matched, JWT will not be extracted. If matched, JWT will be 97 // extracted after the prefix is removed. 98 // 99 // For example, for "Authorization: Bearer {JWT}", 100 // value_prefix="Bearer " with a space at the end. 101 string value_prefix = 3; 102} 103 104// Configuration for an authentication provider, including support for 105// [JSON Web Token 106// (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32). 107message AuthProvider { 108 // The unique identifier of the auth provider. It will be referred to by 109 // `AuthRequirement.provider_id`. 110 // 111 // Example: "bookstore_auth". 112 string id = 1; 113 114 // Identifies the principal that issued the JWT. See 115 // https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1 116 // Usually a URL or an email address. 117 // 118 // Example: https://securetoken.google.com 119 // Example: [email protected] 120 string issuer = 2; 121 122 // URL of the provider's public key set to validate signature of the JWT. See 123 // [OpenID 124 // Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). 125 // Optional if the key set document: 126 // - can be retrieved from 127 // [OpenID 128 // Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) 129 // of the issuer. 130 // - can be inferred from the email domain of the issuer (e.g. a Google 131 // service account). 132 // 133 // Example: https://www.googleapis.com/oauth2/v1/certs 134 string jwks_uri = 3; 135 136 // The list of JWT 137 // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). 138 // that are allowed to access. A JWT containing any of these audiences will 139 // be accepted. When this setting is absent, JWTs with audiences: 140 // - "https://[service.name]/[google.protobuf.Api.name]" 141 // - "https://[service.name]/" 142 // will be accepted. 143 // For example, if no audiences are in the setting, LibraryService API will 144 // accept JWTs with the following audiences: 145 // - 146 // https://library-example.googleapis.com/google.example.library.v1.LibraryService 147 // - https://library-example.googleapis.com/ 148 // 149 // Example: 150 // 151 // audiences: bookstore_android.apps.googleusercontent.com, 152 // bookstore_web.apps.googleusercontent.com 153 string audiences = 4; 154 155 // Redirect URL if JWT token is required but not present or is expired. 156 // Implement authorizationUrl of securityDefinitions in OpenAPI spec. 157 string authorization_url = 5; 158 159 // Defines the locations to extract the JWT. For now it is only used by the 160 // Cloud Endpoints to store the OpenAPI extension [x-google-jwt-locations] 161 // (https://cloud.google.com/endpoints/docs/openapi/openapi-extensions#x-google-jwt-locations) 162 // 163 // JWT locations can be one of HTTP headers, URL query parameters or 164 // cookies. The rule is that the first match wins. 165 // 166 // If not specified, default to use following 3 locations: 167 // 1) Authorization: Bearer 168 // 2) x-goog-iap-jwt-assertion 169 // 3) access_token query parameter 170 // 171 // Default locations can be specified as followings: 172 // jwt_locations: 173 // - header: Authorization 174 // value_prefix: "Bearer " 175 // - header: x-goog-iap-jwt-assertion 176 // - query: access_token 177 repeated JwtLocation jwt_locations = 6; 178} 179 180// OAuth scopes are a way to define data and permissions on data. For example, 181// there are scopes defined for "Read-only access to Google Calendar" and 182// "Access to Cloud Platform". Users can consent to a scope for an application, 183// giving it permission to access that data on their behalf. 184// 185// OAuth scope specifications should be fairly coarse grained; a user will need 186// to see and understand the text description of what your scope means. 187// 188// In most cases: use one or at most two OAuth scopes for an entire family of 189// products. If your product has multiple APIs, you should probably be sharing 190// the OAuth scope across all of those APIs. 191// 192// When you need finer grained OAuth consent screens: talk with your product 193// management about how developers will use them in practice. 194// 195// Please note that even though each of the canonical scopes is enough for a 196// request to be accepted and passed to the backend, a request can still fail 197// due to the backend requiring additional scopes or permissions. 198message OAuthRequirements { 199 // The list of publicly documented OAuth scopes that are allowed access. An 200 // OAuth token containing any of these scopes will be accepted. 201 // 202 // Example: 203 // 204 // canonical_scopes: https://www.googleapis.com/auth/calendar, 205 // https://www.googleapis.com/auth/calendar.read 206 string canonical_scopes = 1; 207} 208 209// User-defined authentication requirements, including support for 210// [JSON Web Token 211// (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32). 212message AuthRequirement { 213 // [id][google.api.AuthProvider.id] from authentication provider. 214 // 215 // Example: 216 // 217 // provider_id: bookstore_auth 218 string provider_id = 1; 219 220 // NOTE: This will be deprecated soon, once AuthProvider.audiences is 221 // implemented and accepted in all the runtime components. 222 // 223 // The list of JWT 224 // [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). 225 // that are allowed to access. A JWT containing any of these audiences will 226 // be accepted. When this setting is absent, only JWTs with audience 227 // "https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]" 228 // will be accepted. For example, if no audiences are in the setting, 229 // LibraryService API will only accept JWTs with the following audience 230 // "https://library-example.googleapis.com/google.example.library.v1.LibraryService". 231 // 232 // Example: 233 // 234 // audiences: bookstore_android.apps.googleusercontent.com, 235 // bookstore_web.apps.googleusercontent.com 236 string audiences = 2; 237} 238