I am following the docs https://developers.google.com/calendar/v3/push#creating-notification-channels
I am trying to setup my channel to watch for changes to events, using postman I am posting to:
https://www.googleapis.com/calendar/v3/calendars/xxx/events/watch
[{"key":"id","value":"xxx#xxx.co.uk"},
{"key":"type","value":"web_hook"},
{"key":"address","value":"https://xxx.firebaseapp.com"},{"key":"key","value":"AIzaSyBkAEZGoQwB0f-Kmq4mCCzm93422up8oQw"}]
I keep getting the error below:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
Any ideas why I am getting this? I can fetch data from the API ok.
You are getting the 401 "login required", it means that you are using an expired or invalid access.
Check this Google group discussion on how the process was done on getting the refresh token using the client ID and client secret to implement the authenticated and authorized API calls.
See also references:
Google calendar API returns error 401 'login required' on inserting event in public calendar
Error with Google Calendar API - 401 Login required when adding a calendar event
Using API Key to authenticate a request generates a 401 error
Related
I'm trying to get my groups where I owner, so I'm trying to perform a GET request on
GET
https://api.linkedin.com/v2/groupMemberships?q=member&member={person URN}&membershipStatuses=List(MEMBER,OWNER)
But I'm getting the following error:
{
"serviceErrorCode": 0,
"message": "Invalid query parameters passed to request",
"status": 400
}
My request to "Marketing Developer Platform" was approved and I am putting the headers in the request:
X-Restli-Protocol-Version: 2.0.0
Authorization: Bearer {{accessToken}}
In the parameter
member={person URN}
I am sending.
member=urn:li:person:{{accountId}}
What am I doing wrong?
I'm playing around with the new firebase auth emulator (on the node admin SDK), and have made some tests that run perfectly if I manually delete the created users between each test, but I can't seem to automatically delete them?
I've used the endpoint defined here in my beforeEach(), but I get an "Response code 401, unauthorized" back from the response call?
Endpoint: delete: http://localhost:9099/emulator/v1/projects/{project-id}/accounts
I just tried using Postman to send the call, and it responded with the following:
{
"error": {
"code": 401,
"message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"errors": [
{
"message": "Login Required.",
"domain": "global",
"reason": "required",
"location": "Authorization",
"locationType": "header"
}
],
"status": "UNAUTHENTICATED"
}
}
The URL in the error didn't seem to give me much help beyond adding a google button to a web app, which pointed me to creating an OAuth2 web account. I entered the localhost:9099 into my existing one, but don't know where I should use the client ID and the client secret? If they are what I should use at all.
I know I need some sort of Authorization header for the delete call, but I just don't get what I should put in that header, or how.
Thank you for any insight into this.
Edit: I've now tried the following Authorization headers:
"admin"
"" (an empty string)
The full token generated by firebase.options.credential.getAccessToken()
The access_token field of the above token
The id_token field of the above token.
The token itself looks like this (redacted some fields):
{
"access_token":
"[access token string here]",
"expires_in": 3599,
"scope":
"openid https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloudplatformprojects.readonly",
"token_type": "Bearer",
"id_token":
"[id token string here]"
}
Thanks! However, I wanted using this with a curl format to get this on a npm script, so here is what I used:
curl -H 'Authorization: Bearer owner' -X DELETE http://localhost:9099/emulator/v1/projects/<projectid>/accounts
the response should be:
{}
I figured it out! When the admin generates a token, I use the access_token field part of this token and add the header Authorization: 'Bearer' + access_token to the delete request. Thanks for the help.
(This is an emulator-only endpoint)
Edit: I could just use the string "owner" as the token... Took me a while to get that, but now it works.
When I post a sign-in request to https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=<API_KEY>, the response body is missing the refresh token and expiration time even though the sign-in operation itself succeeds. It looks like this:
{
"kind": "identitytoolkit#VerifyPasswordResponse",
"localId": <LOCAL_ID>,
"email": <EMAIL>,
"displayName": "",
"idToken": <ID_TOKEN>,
"registered": true
}
It does return an id token, but I've tried using that to authenticate RTDB requests (in the form of <DATABASE_URL>/.../node.json?auth=<ID_TOKEN>) and they fail with HTTP error 401 even though my database has public read/write rules.
The response body returned by a sign-up request (https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=<API_KEY>) doesn't have the same problem.
How do I fix this?
You need to pass returnSecureToken set to true in the request as documented in the REST API docs.
I'm Trying to push notification from postman to firebase for testing
I posted using documentation tips and response is success but nothing sent to my android device .. I tested my code using debugging and firebase console and it working well but when i used postman nothing happens
This is my posting format
http://fcm.googleapis.com/fcm/send
Content-Type : application/json
Authorization: key=AAAAitv2sYo:APA91bENlw37p5pa7pMIKoVv8CroevA7tK3tVFNGUchhGf_zkeKVFdQeYcKQmxsg-2ZOkNHMAvloRjTugmZHzNBa_TLMR2_7lffglJvrKHT1TNixHxtXZimWi2f7c16M2M7ic2S5g1gC
{
"notification" :
{
"body" : "hello",
"title": "firebase",
"sound": "default"
},
"to" : "AAAAitv2sYo:APA91bENlw37p5pa7pMIKoVv8CroevA7tK3tVFNGUchhGf_zkeKVFdQeYcKQmxsg-2ZOkNHMAvloRjTugmZHzNBa_TLMR2_7lffglJvrKHT1TNixHxtXZimWi2f7c16M2M7ic2S5g1gC"
}
i used authorization and to is the same key " server key "
and the response is
{
"multicast_id": 9063339683658826188,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1533133178192931%0000000000000000"
}
]
}
Note : When i write https posting is failed and got Could not get any
response error when i made it http it get the above response
another question .. can i see the sent message in firebase console ?
The Authorization key in the header and the to property in the message have different purposes and are never the same value.
The Authorization key validates your request to the Firebase server. Its value is the "Server key" shown in the Cloud Messaging tab of your Project settings at the Firebase console.
The message to value is the registration ID of the device to which you are sending the message. It is obtained from a call to a client-side SDK.
I've authenticated and build my query and receive the 403 response as Forbidden.
I authenticated with using httr example
# 1. Find OAuth settings for google:
google <- oauth_endpoint(NULL, "auth", "token", base_url = "https://accounts.google.com/o/oauth2")
# 2. Register an application at https://code.google.com/apis/console#access
myapp <- oauth_app("google", "{my app id}.apps.googleusercontent.com", secret = "{my secret}")
# 3. Get OAuth credentials
cred <- oauth2.0_token(google, myapp, scope = "https://www.googleapis.com/auth/yt-analytics.readonly")
After authorizing in the browser the R console prints 'Authentication complete."
The query is
query <- "https://www.googleapis.com/youtube/analytics/v1/reports?
ids=channel%3D%3D{my channel id}
&start-date=2013-01-01
&end-date=2013-07-31
&metrics=views
&dimensions=day"
The token for authorization is passed in header as
token <- paste("Authorization: Bearer ",cred[[1]], sep="")
I've tried the request with both httr and RCurl
# RCurl
api.response <- getURL(query, httpheader = token)
# httr - I think this is the right way to add the token to the header
url_signer <- sign_oauth2.0(cred[[1]], as_header = TRUE)
api.response <- GET(query, config = url_signer)
The api.response is unfortunately not very descriptive
{
"error":
{
"errors":
[
{
"domain": "global",
"reason": "forbidden",
"message": "Forbidden"
}
],
"code": 403,
"message": "Forbidden"
}
}
I'm not sure where else to look and have read through the documentation.
From experience, a 403 Forbidden response from the analytics API can mean a few things about the video you're trying to pull analytic information for:
The video is private and not uploaded by you
You have not claimed ownership on the video
The video does not exist, or has been deleted by the uploader
The uploader account has been terminated
You have a claim on the video that falls under one of the following statuses:
Inactive
Potential
When in doubt, contact your partner manager/TAM. I hope this helps!