Ошибка входа в систему Google через Azure
В моем приложении я хочу использовать логин Google, поэтому для этого я использую Azure Services. Из Google я могу успешно войти в систему и получить все детали, но следующая ошибка возникает на стороне Azure:
Ошибка домена = com.Microsoft.WindowsAzureMobileServices.ErrorDomain Код = -1302 "Ошибка: эмитент id_token недействителен." UserInfo = {NSLocalizedDescription = Ошибка: эмитент id_token недействительным.}
Код:
if (user.authentication != nil)
{
let delegate = UIApplication.sharedApplication().delegate as? AppDelegate
let client = delegate!.client!;
// let nextViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SWRevealViewController") as! SWRevealViewController
// self.presentViewController(nextViewController, animated: true, completion: nil)
let payload: [String: String] = ["id_token": idToken]
client.loginWithProvider("google", token: payload, completion: { (user, error) in
if error != nil{
//here i am getting the above mentioned error
print(error)
}
if user != nil{
print(user)
print("Google Login Sucess")
self.call(false, email: email, firstName: firstName, lastName: lastName, id: googleId, token: idToken,imageUrl: imageUrl.absoluteString)
}
})
}
override func viewDidLoad()
{
super.viewDidLoad();
GIDSignIn.sharedInstance().signOut()
GIDSignIn.sharedInstance().scopes.append("https://www.googleapis.com/auth/plus.login");
GIDSignIn.sharedInstance().clientID = "XXXXXXXX";
GIDSignIn.sharedInstance().serverClientID = "XXXXXXXXX"
GIDSignIn.sharedInstance().uiDelegate = self
}
Я не знаю, является ли это проблемой токена или что-то еще.
Ответы
Ответ 1
Ответ, который мы получаем, выглядит ниже. Я думаю, что бэкэнд мобильной службы не любит идентификатор эмитента: " https://accounts.google.com". Он принимает accounts.google.com
{
"iss": "https://accounts.google.com",
"at_hash": "bGW4JYlbzO64NGLInOpKgg",
"aud": "XXXXXX-XXXXXXX",
"sub": "XXXXXXXXXX",
"email_verified": "true",
"azp": "XXXXXX-XXXXXXXXXXX",
"hd": "techmorphosis.com",
"email": "[email protected]",
"iat": "1477398958",
"exp": "1477402558",
"name": "Anuj Mody",
"given_name": "Anuj",
"family_name": "Mody",
"locale": "en",
"alg": "RS256",
"kid": "XXXXXXXXXXXX"
}
Ответ 2
Для google вам нужны как id_token, так и authorization_code:
let payload: [String: String] = ["id_token": user.authentication.idToken, "authorization_code": user.serverAuthCode]
client.loginWithProvider("google", token: payload) { (user, error) in
// ...
}
Ссылка: https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-ios-how-to-use-client-library#a-namegoogle-sdkahow-to-authenticate-users-with-the-google-sign-in-sdk-for-ios