私はESPV2とFirebase authentication および API Managementを備えた Cloud functions を使用して、認証された Cloud functions を構築していました。認証後にfirebaseからJWTトークンを取得したら、 ascurl
のトークンとのリンクを試みました。郵便配達員で試したところ、「JWT の検証に失敗しました」というメッセージが表示されました。クライアント アプリケーションから試してみると、「Bad Request」が表示されました。リンクに記載されている設定以外に、リクエストを行う前に何か特別なことをする必要がありますか?Authorization
Bearer
リクエストに応じて詳細を更新
swagger: "2.0"
info:
title: My API Endpoints
description: My API Endpoints
version: 1.0.0
host: myapi-abcdefg.a.run.app
schemes:
- https
produces:
- application/json
securityDefinitions:
firebase:
authorizationUrl: ""
flow: "implicit"
type: "oauth2"
x-google-issuer: "https://securetoken.google.com/fan-demand"
x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
x-google-audiences: "my-google-project-id"
paths:
/getevents:
get:
summary: Get Events
operationId: getevents
x-google-backend:
address: https://us-central1-my-google-project-id.cloudfunctions.net/getevents
protocol: h2
security:
- firebase: []
responses:
"200":
description: A successful response
schema:
type: string
"403":
description: Failed to authenticate
このサービスをデプロイした後、 Dart SDKのメソッドFirebase
を使用して id トークンを取得します。JWT トークンは Header.payload.tail 形式です。次に、 + id トークンを
使用してヘッダーにトークンを追加すると、次の応答が返されます。getIdToken()
Firebase
Authorization
Bearer
更新: ESP の代わりにhttps://cloud.google.com/api-gateway/docs/authenticating-users-firebase を使用して、新しい API Gateway 製品を試しました。
私の構成:
swagger: "2.0"
info:
title: My API Endpoints
description: My API Endpoints
version: 1.0.0
schemes:
- https
produces:
- application/json
securityDefinitions:
firebase:
authorizationUrl: ""
flow: "implicit"
type: "oauth2"
x-google-issuer: "https://securetoken.google.com/my-project"
x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
x-google-audiences: "my-project"
paths:
/getevents:
get:
summary: Get Events
operationId: getevents
x-google-backend:
address: https://us-central1-my-project.cloudfunctions.net/getevents
security:
- firebase: []
responses:
"200":
description: A successful response
schema:
type: string
"403":
description: Failed to authenticate
クライアント側のコード:
クライアント側は dart で開発され、 https:user
//pub.dev/documentation/firebase_auth/latest/firebase_auth/User/getIdToken.html の firebase auth オブジェクトです。
user.getIdToken().then((token) async {
final response = await http.get(
Uri.parse(
'https://mygateway/getevents'),
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token',
});
print('Token : ${token}');
print(response.body);
});
私は応答を得た
403 Forbidden - クライアントには URL を取得する権限がありません