現在、アプリに対してユーザーを認証するために Google サインを使用していますが、更新後に id_token に問題が発生しています。以下の変数を設定しています。1 つは iOS クライアント用で、もう 1 つはサーバー用です。これはAWSの例に従っています。AWS を使用してサーバーにアクセスしているため、クライアント ID と Web アプリケーション ID が必要です。
static let GOOGLE_CLIENT_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx7dde.apps.googleusercontent.com"
// Backend web application client ID
static let GOOGLE_WEB_APPLICATION_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx65ap.apps.googleusercontent.com"
アプリケーションに初めてログインすると、期待どおりに動作します。次の ID トークンが返されます。
{
"iss": "https://accounts.google.com",
"at_h ash": "xxxxxxxxxxxxxxxxxxxxxx",
"aud": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx65ap.apps.googleusercontent.com",
"sub": "xxxxxxxxxxxxxxxxxxxxxx",
"email_verified": true,
"azp": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx7dde.apps.googleusercontent.com",
"email": "2222MyNewEmailIsHere@gmail.com",
"iat": 1475747692,
"exp": 1475751292
}
「aud」は GOOGLE_WEB_APPLICATION_ID と一致し、「azp」は GOOGLE_CLIENT_ID と一致することがわかります。
ただし、次のように refreshTokensWithHandler を実行すると:
GIDSignIn.sharedInstance().currentUser.authentication.refreshTokensWithHandler { (GIDAuthentication, error) in
self.googleAuth = GIDAuthentication;
self.completeGoogleLogin()
}
応答に問題があります。ID トークンは正しく更新されているため、新しい ID トークンが作成されています。ただし、「aud」はクライアント ID で上書きされているようです。これは、トークンの有効期限が切れているかどうかに関係なく発生します。
{
"iss": "https://accounts.google.com",
"at_h ash": "xxxxxxxxxxxxxxxxxxxxxx",
"aud": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx7dde.apps.googleusercontent.com"",
"sub": "xxxxxxxxxxxxxxxxxxxxxx",
"email_verified": true,
"azp": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx7dde.apps.googleusercontent.com",
"email": "2222MyNewEmailIsHere@gmail.com",
"iat": 1475747692,
"exp": 1475751292
}
ご覧のとおり、2 番目の応答の「aud」と「azp」は同じです。次に、サーバーにリクエストを送信すると、トークンを検証できないと不平を言っています。
他の誰かがこれを経験したかどうか疑問に思っていますか?おそらくGIDSignInの問題のようです。