Google speech to text authentication access token expiry issue - google-cloud-platform

I am using google speech to text api and followed all the steps mentioned in below link :
https://cloud.google.com/speech/docs/getting-started
When I used the commands using command line interface mentioned in above page, everything seems fine and I am getting the output text as well.
But, if I create a php file for the same commands then it is working fine for 1 hour and then the token expires. And also not creating the token with below command via php file :
shell_exec(gcloud auth activate-service-account --key-file=/keyfile.json)
shell_exec(gcloud auth print-access-token)
But the same command is working very fine on command line system.
So basically I am having issue with the authentication process via php file and getting the below error :
"error": { "code": 401, "message": "Request had invalid authentication credentials.", "status": "UNAUTHENTICATED" } }
Can anyone please tell what I am missing or am I following the wrong approach for authentication?

Reproduced successfully and ran again the php file after one hour and then 2 hours with the same result: no errors. You may consider providing more detail, maybe by including directives such as ini_set('display_errors', 'On'); error_reporting(E_ALL); in your file.
A relevant read about the on-hour expiry of credentials is to be found at [1], in the 401-error sub-chapter.
[1] https://cloud.google.com/storage/docs/xml-api/reference-status

Related

Get WhatsApp Business API up and running (using Postman)

I am trying to set up the WhatsApp business API client.
I followed this instruction https://developers.facebook.com/docs/whatsapp/getting-started/#client-setup
At step 2 I installed "single instance" using this instruction https://developers.facebook.com/docs/whatsapp/installation/dev-single-instance
At Step 6 of the "single instance" instruction, I started Postman https://developers.facebook.com/docs/whatsapp/guides/postman.
At Step 4 of "Postman Collection" I configured AdminUsername (admin), AdminPassword (secret), NewAdminPassword (****) and URL (https://localhost:9090 [the example says 7901, but that results in error]). Response: some headers and "Status 401 Unauthorized".
Maybe this helps to find the cause: Following this post Whatsapp Business API production setup not working I ran this command docker-compose logs > debug_output.txt. This was the output: https://drive.google.com/file/d/1eXeaTeNiAiPW3A5bZ54gOg70UIPfF-vt/view?usp=sharing. (It doesn't make much sense to me...). I do have a MySQL WorkBench installed. No clue if it is installed in the same 'instance'.
Needed to type password in "body" tab in Postman

Caller does not have permission error when using GMail API

I get 500 server error on my django website thats running on Google App Engine. When I look at Google App Engine logs I see the following error:
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest returned "The caller does not have permission">
When I hard refresh the browser this error goes away. Then after some time it pops back up. Happens on mobile(firefox, safari), laptop (firefox,chrome).
UPDATE:
In Django settings.py I have following code. Its last line generates the error :
pickle_path = 'token.pickle' # path to token.pickle
with open(pickle_path, 'rb') as token:
creds = pickle.load(token)
SERVICE = build('gmail', 'v1', credentials=creds) # ERROR LINE
When I run the django server locally: I get following error:
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest returned "The caller does not have permission">
When I restart cloud sql connection from my terminal - the error is gone. This never used to happen until a few days ago.
Here's a workaround:
Download the discovery_doc directly from google here
Load the json file (you can name it gmail-api.json)
Build from this json file using build_from_document
Before
from googleapiclient.discovery import build
gmail_creds = get_service_account_creds()
gmail_service = build('gmail', 'v1', credentials=gmail_creds)
After
from googleapiclient.discovery import build_from_document
discovery_doc = load_json('config/gmail-api.json')
gmail_creds = get_service_account_creds()
gmail_service = build_from_document(discovery_doc, credentials=gmail_creds)
It seems that it is now a P0 for Google, so hopefully it will be fixed soon.
https://issuetracker.google.com/issues/160441983
I am also started facing this issue. I have been using Google APIs for more than a year, but suddenly this error HttpError 403 when requesting https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest returned "The caller does not have permission. However, couple of times I didn't see this error and API call was successful. I hope this error at the Gmail API server.
Update:
I am able to call Google APIs without any issues. Seems like issue is resolved at google's end.
I am having the same issue with GAM ADV-X. I thought it was an issue on my computer so I tried on 2 different computers and get the same error. It indeed looks like something changed in the Gmail API over the weekend. Will submit a ticket to Google.

Get "code" when using Azure AD Graph API from the response

This question is related to this other post: how to get 'code' for getting access_token when using Azure AD Graph API. Let me open a new thread as I cannot write a comment. I will try to explain my problem as best as possible:
Context
My app is a web server written in Django with several REST APIs used by the frontend. I had an API for the users to register, which used to use Microsoft login api perfectly. Everything was fine until we found out some clients had MFA and we could not use the api anymore.
Possible solution
I followed the instructions in https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow for getting the token, and I can do it correctly manually. That is:
Step 1: I write this url on the browser and login
// Line breaks for legibility only
"https://login.microsoftonline.com/<tenant>/oauth2/v2.0/authorize?
client_id=<client_id>
&response_type=code
&redirect_uri=<redirect_uri>
&response_mode=query
&scope=https://graph.microsoft.com/.default"
Step 2: The response I get in the browser address bar contains the code. I extract it manually, using the console.
<redirect_uri>/?code=?code=<authorization_code>&session_state=<session_state>
Step 3: With this code I can ask for a token to the api:
// Line breaks for legibility only
POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=<client_id>
&scope=https://graph.microsoft.com/.default
&code=<authorization_code>
&redirect_uri=<redirect_url>
&grant_type=authorization_code
&client_secret=<client_secret>
Problem
Ok, so far, everything works fine, the problem is that I have to get the code in step 2 manually and I want to include it in my Django code. What can I do?
Thank you!

Error code 500 while uploading the file on Box Drive

I'm trying to upload file on Box using rest API and getting 500 Internal Server Error.
URL: https://upload.box.com/api/2.0/files/content
Header :- "Authorization: Bearer XYZ"
Body(form-data) : attributes='{"name":"test.png", "parent":{"id":""498765432099}}'
file=file will be here
Postman screenshot are following:-
Thank you guys problem is resolved,
I was using the postman from google chrome extension to check the API
and getting 500 in response.
But now I had tested it on postman official application (https://www.getpostman.com/apps) Now it's working fine.
As postman extension is deprecated it still gives me error but on official application its working fine.

wsimport with special character and Xauthfile

I'm facing the same problem that this guy here:
wsimport Xauthfile error
Since he didn't gave a feedback and I'm new here and can't ask him if he solved his problem I'm opening a new question.
I'm using ubuntu and have JDK7 from java oracle installed.
I'm consuming a thirdparty web service. The password (...GT##ED...) for the webservice have a character that conflicts with de -Xauthfile syntax (http[s]://user:password#host:port//) because of the "#". The dots (...) represents the rest of my password.
Here is the command I'm running:
wsimport -p loa -Xauthfile "path_to_auth.txt" https://myWS?wsdl
In my auth.txt file I have:
https://user:...GT##ED...#myWS?wsdl
In return a get
parsing WSDL...
[ERROR] Server returned HTTP response code: 401 for URL: https://myWS?wsdl,
"https://myWS?wsdl" needs authorization, please provide authorization file with
read access at /home/user_name/.metro/auth or use -Xauthfile to give the
authorization file and on each line provide authorization information using this
format : http[s]://user:password#host:port//<url-path>
I search all over the net, but no success.
When I try to import the WS using SoapUI like in this tutorial I got a
[ERROR] sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
certification path to requested target
and I don't know where to specify the ssl file for SoapUI. I tryed in
preferences -> SSL Settings
but no lucky.
That's it. I'll apreciate any help.
EDIT
OK, so I pass through the authorization, changing the characters using the HTML URL Encoding Reference, but now I'm getting the following error
[ERROR] Server redirected too many times (20), "https://ws?wsdl" needs
authorization, please provide authorization file with read access at /home/user
/.metro/auth or use -Xauthfile to give the authorization file and on each line
provide authorization information using this format :
http[s]://user:password#host:port//<url-path>
I am using Apache axis2 instead of wsimport. first this problem happened for me, and I write a bash script and it worked.
#!/bin/bash
/axis2-1.7.9/bin/wsdl2java.sh -uri http://username:password#domain/x?wsdl
I also use encoding password and username by 'url encoding' such as bellow:
##%g3E99! -(URL encoding)-> %40%23%25g3E99%21
First create auth.txt file where you need to put the following and save it in C drive:
http://username:password#localhost:port/wsdlurl
Now run the following command:
wsimport -Xauthfile C:\auth.txt -keep http://example.com/test?wsdl
This worked for me.