您好,我一直在开发一款应用程序,让用户可以使用 Google Books API 搜索图书。一切正常,直到我想访问用户最喜欢的书,添加和删除它们。错误与授权有关。 google books api 在这里说访问最喜欢的书作为
GET https://www.googleapis.com/books/v1/mylibrary/bookshelves?key=yourAPIKey Authorization: /* auth token here */
我正在做的是这个。
var userId: String?
if(UserStats.currentUser?.authentication.idToken != nil){
userId = UserStats.currentUser?.authentication.idToken
}
guard let id = userId else{
print("User Not authenticated")
return
}
print("USer ID : \(id)")
let theUrl = URL(string: "https://www.googleapis.com/books/v1/mylibrary/bookshelves?key=AIzaSyBIDJ50ak-caS3M-6nSVbxdN_SmssAlTRI)")
if let url = theUrl{
print("Search Called")
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "GET"
urlRequest.setValue(id, forHTTPHeaderField: "Authorization")
print("URL : " + url.absoluteString)
let task = URLSession.shared.dataTask(with: urlRequest, completionHandler: {
(data, response, error) in
if response != nil{
if let res = response as? HTTPURLResponse{
if(res.statusCode == 408)
{
MessageBox.Show(message: "Error : Request TimeOut", title: "Error", view: self)
}
}
}
if error != nil{
print("Error \(error?.localizedDescription)")
MessageBox.Show(message: (error?.localizedDescription)!, title: "An error occurred", view: self)
}
else{
do{
let jsonData = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
print(jsonData)
}catch{
}
}
}
}
}
每次我运行代码时都会出现错误。错误在这里
{
error = {
code = 401;
errors = (
{
domain = global;
location = Authorization;
locationType = header;
message = "Invalid Credentials";
reason = authError;
}
);
message = "Invalid Credentials";
};
}
我正在使用适用于 iOS 的 Google Sign in sdk,这是我尝试进行身份验证并成功完成的方式。
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().clientID = "1049478111900-4q2m623kj5m0fev7fbqq93tk7rgjvs2f.apps.googleusercontent.com"
GIDSignIn.sharedInstance().scopes.append("https://www.googleapis.com/auth/books")
GIDSignIn.sharedInstance().signIn()
登录成功,因为我在成功登录时确实看到了 Success 打印,而且我能够检索登录用户的 accessToken 和 idToken。 这是我打印的 idToken。
登录用户的 ID token
eyJhbGciOiJSUzI1NiIsImtpZCI6ImNiMDE1MDIxOWM5Y2NlZTBjY2Y3MDg2OTA4NmIxYjVmNGIzMGVmNWIifQ.eyJhenAiOiIxMDQ5NDc4MTExOTAwLTRxMm02MjNrajVtMGZldjdmYnFxOTN0azdyZ2p2czJmLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiYXVkIjoiMTA0OTQ3ODExMTkwMC00cTJtNjIza2o1bTBmZXY3ZmJxcTkzdGs3cmdqdnMyZi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInN1YiI6IjEwOTI5NDQ5ODE2OTA4NjY1OTU5NyIsImVtYWlsIjoic2FsbWFubWFqaWQxNEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiYXRfaGFzaCI6IlNMRzRoTGlrQXExZmQ2MnlnWklKR2ciLCJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJpYXQiOjE0OTMxMTE4NjAsImV4cCI6MTQ5MzExNTQ2MH0.Ct1aGjA6K8Vev_FmdjCj5hGJKyALY9jUcakbp4HSesarK8LHjEe2wZ1-8FR-FEyufIDTPENEkYpSXQRGYuHKXYmykNq6LMcRSWmR2JV8P5hDxwYPKcMwG4EgcvrEHncVBzjinn652mVHap6uBzwC4nvbpprpGKuglxZrqBKSobBthZnDitgyuMseWUq0lrfunNyA89g3KD9twjMMIDTMnP40u6if10T7P6JyedSoDgoOZ6rmhQOckovA1ery1rPl0zwvoRrbZ2GS_z-Zzz8ujhfyuxex-0yYExhVF09Gl4lvf5zySnSSbIGi6MIYaZC3W0-WaU4t0Hgho1kujl3ryw
请帮我解决这个问题。我整夜都在工作,无法解决这个问题。如果有更好的方法或者我可以解决这个问题,请告诉我。
最佳答案
选项 1:
URL(string: "https://www.googleapis.com/books/v1/mylibrary/bookshelves?access_token=YourToken)")
注意: key 用于公共(public)访问访问 token 用于私有(private)你只需要一个或另一个
注2:你可以通过放置
来测试这个https://www.googleapis.com/books/v1/mylibrary/bookshelves?access_token=YourToken
在任何网络浏览器中。
选项 2:
标题应该是这样的
Authorization, Bearer accessToken
我认为你缺少承载。
您不需要同时执行这两个操作,一个都可以。
When sending the access token in the "Authorization" request header field defined by HTTP/1.1 [RFC2617], the client uses the "Bearer" authentication scheme to transmit the access token.
Authorization : Bearer AccessToken
关于ios - Google Books Oauth 访问 token 授权错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43606826/