如何验证Google云终端中的API密钥v2
问题描述:
我对Google云端点尤其是V2是新手,我认为它是制作基于服务的应用程序的重要层。 从文档我观察他们提供了使用端点框架,然后打开API的选项。现在,当我使用所需的API密钥的框架,然后生成openapi.json。我似乎无法得到任何错误,当我提出请求没有API密钥。我想知道为什么当我将我的课程标记为需要的API密钥时。为什么我自己提供验证逻辑? 这是使用api验证所有方法的配置。如何验证Google云终端中的API密钥v2
@Api(name = "testapi",
version = "v1",
apiKeyRequired = AnnotationBoolean.TRUE,
scopes = {Constants.EMAIL_SCOPE},
clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID},
audiences = {Constants.ANDROID_AUDIENCE}
)
然后生成openapi.json文件,这是POM的配置,虽然我仍然试图掌握如何以这样的方式,我不会要进入我的服务进行配置类
<profiles>
<profile>
<id>GetSwaggerDoc</id>
<activation>
<property>
<name>GetSwaggerDoc</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<includePluginDependencies>true</includePluginDependencies>
<mainClass>com.google.api.server.spi.tools.EndpointsTool</mainClass>
<arguments>
<argument>get-swagger-doc</argument>
<argument>--hostname=test-api.endpoints.${endpoints.project.id}.cloud.goog</argument>
<argument>--war=target/test-1.0-SNAPSHOT</argument>
<argument>com.rareatom.test.services.TestApi</argument>
</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>com.google.endpoints</groupId>
<artifactId>endpoints-framework-tools</artifactId>
<version>${endpoints.framework.version}</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.9.30</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>`
当我运行mvn exec:java -DGetSwaggerDoc
这产生
{
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "test-api.endpoints.test-test-160113.cloud.goog"
},
"host": "test-api.endpoints.test-test-160113.cloud.goog",
"basePath": "/_ah/api",
"schemes": [
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {
"/testapi/v1/test": {
"post": {
"operationId": "TestapiTest",
"parameters": [ ],
"responses": {
"200": {
"description": "A successful response",
"schema": {
"$ref": "#/definitions/Response"
}
}
},
"security": [
{
"google_id_token": [ ]
},
{
"google_id_token_https": [ ]
},
{
"api_key": [ ]
}
],
"x-security": [
{
"google_id_token": {
"audiences": [
"AIzaSyAsnv2yeF6003txjfBVrZrlUe8jvfUJAtE"
]
}
},
{
"google_id_token_https": {
"audiences": [
"AIzaSyAsnv2yeF6003txjfBVrZrlUe8jvfUJAtE"
]
}
}
]
}
}
},
"securityDefinitions": {
"google_id_token_https": {
"type": "oauth2",
"authorizationUrl": "",
"flow": "implicit",
"x-google-issuer": "https://accounts.google.com",
"x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
},
"api_key": {
"type": "apiKey",
"name": "key",
"in": "query"
},
"google_id_token": {
"type": "oauth2",
"authorizationUrl": "",
"flow": "implicit",
"x-google-issuer": "accounts.google.com",
"x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
}
},
"definitions": {
"Status": {
"enum": [
"SUCCESS",
"FAILURE"
]
},
"Response": {
"properties": {
"code": {
"type": "integer",
"format": "int32"
},
"data": {
"$ref": "#/definitions/_any"
},
"message": {
"type": "string"
},
"status": {
"$ref": "#/definitions/Status"
}
}
},
"_any": { }
}
}
然后使用gcloud service-management deploy部署此配置。
答
我注意到,API密钥进行验证,当你有一个以上的参数或在你的pom.xml多个@Api注解的类和你的web.xml
的pom.xml
<arguments>
<argument>get-swagger-doc</argument>
<argument>--hostname=tita-api.endpoints.${endpoints.project.id}.cloud.goog</argument>
<argument>--war=target/tita-1.0-SNAPSHOT</argument>
<argument>com.rareatom.tita.services.TestApi</argument>
<argument>com.rareatom.tita.services.SessionServices</argument>
</arguments>
并为您的web.xml
<servlet>
<servlet-name>EndpointsServlet</servlet-name>
<servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
<init-param>
<param-name>services</param-name>
<param-value>com.rareatom.tita.services.TestApi,
com.rareatom.tita.services.SessionServices</param-value>
</init-param>
</servlet>
+1
你能举个例子说明你如何提出请求,以及处理请求的方法是什么样子的?您应该匿名处理您不想分享的任何内容。这对再现这种行为是非常有帮助的,这点我没有注意到。 – Nick
可以请您发布您的配置。你如何使你的API使用API密钥? –
@MichaelMeyer所有问题都已更新。 –
你如何提出要求? – Nick