I'm trying to develop a flutter (web) application which needs to invoke access restricted http triggered cloud functions.
Therefore I have created a service account in my google cloud console and followed the example on how to retrieve an authenticated http client as an autonomous application of the googleapis_auth package (https://github.com/dart-lang/googleapis_auth).
final accountCredentials = new ServiceAccountCredentials.fromJson(r'''{ "private_key_id": "****", "private_key": "****", "client_email": "****.iam.gserviceaccount.com", "client_id": "****", "type": "service_account" }''');
var scopes = [CloudfunctionsApi.CloudPlatformScope];
AuthClient client = await clientViaServiceAccount(accountCredentials, scopes);
This seems to work fine. But when I try to use the received client to make a post request to my cloud function, I get a ClientException ("failed to parse header value").
http.Response resp = await client.post( CloudFunctiontriggerURL, body: {'data': userId});
As I understand the examples, this should work fine without specifying any headers manually in the POST function call. Correct? However, even if I specify the header manually, I get this error.
Any help with this would be highly appreciated.
I believe that you are getting 401 Unauthorized: "Failed to parse header value" exception.
In order to invoke a restricted http Cloud Functions, the service account need the cloudfunctions.functions.invoke permission which can be granted with the role roles/cloudfunctions.invoker. Please confirm this.
https://cloud.google.com/functions/docs/reference/iam/roles
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With