0

私はESPV2Firebase authentication および API Managementを備えた Cloud functions を使用して、認証された Cloud functions を構築していました。認証後にfirebaseからJWTトークンを取得したら、 ascurlのトークンとのリンクを試みました。郵便配達員で試したところ、「JWT の検証に失敗しました」というメッセージが表示されました。クライアント アプリケーションから試してみると、「Bad Request」が表示されました。リンクに記載されている設定以外に、リクエストを行う前に何か特別なことをする必要がありますか?AuthorizationBearer

リクエストに応じて詳細を更新

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()FirebaseAuthorizationBearer ここに画像の説明を入力

更新: 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 を取得する権限がありません

4

1 に答える 1