web-dev-qa-db-ja.com

Firebase Android Authentication failed:expired_token(Auth token is expired)

Android _com.google.gms:google-services:3.0.0_および_com.google.firebase:firebase-auth:9.0.1_を使用したFirebase Authで問題が発生しました。

Firebase(GoogleまたはFacebook)での認証から1時間後、次のエラーが発生します。

W/PersistentConnection: pc_0 - Authentication failed: expired_token (Auth token is expired)

Firebaseトークンが1時間後に期限切れになるのはなぜですか?この有効期限を延長する方法は?

[〜#〜]更新[〜#〜]

引き続きこの問題が発生し、Firebaseトークンが1時間後に期限切れになります。今、私は次のメッセージを受け取ります:W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)

どんな助けにも感謝します。

13
kandroid

(Google、Facebook、電子メールなど)のようなデフォルトの認証プロバイダーを使用している場合、Firebaseコンソールでアプリケーションの「SHA-1キー」を更新すると、トークンの有効期限の問題が修正されます。

これで ディスカッション Google開発者がこの問題を解決するためのガイドを共有しました。

ガイド: https://drive.google.com/file/d/0B94LePkXiqa6SXVFd3N1NzJHX1E/view

3
Karthi R

FirebaseInstanceIdService を実装して更新トークンを取得してください。

登録トークンにアクセスします

FirebaseInstanceIdService を拡張して、トークンの値にアクセスできます。サービスが manifest に追加されていることを確認してから、getTokenのコンテキストでonTokenRefreshを呼び出し、次のように値を記録します。

_    @Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // TODO: Implement this method to send any registration to your app's servers.
    sendRegistrationToServer(refreshedToken);
}
_

onTokenRefreshcallbackは、新しいトークンが生成されるたびに発生するため、そのコンテキストでgetTokenを呼び出すと、利用可能な現在の登録トークンに確実にアクセスできます。 FirebaseInstanceID.getToken()は、トークンがまだ生成されていない場合はnullを返します。

コード:

_import Android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;


public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";

    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would retrieve the token.
     */
    // [START refresh_token]
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);

        // TODO: Implement this method to send any registration to your app's servers.
        sendRegistrationToServer(refreshedToken);
    }
    // [END refresh_token]

    /**
     * Persist token to third-party servers.
     *
     * Modify this method to associate the user's FCM InstanceID token with any server-side account
     * maintained by your application.
     *
     * @param token The new token.
     */
    private void sendRegistrationToServer(String token) {
        // Add custom implementation, as needed.
    }
}
_

お役に立てば幸いです。

0
pRaNaY

Firebaseトークンの新しい最長有効期間は1時間です-私は本日の初めにドキュメントでそれを読みました。

authヘッダーの無効なクレーム 'kid'については、Googleでちょうど2つの検索結果が得られます(:Firebaseのドキュメントにkidに関連するドキュメントはありません。 Googleからの回答を待つ必要があります(または、可能であれば古いバージョンのFirebaseに切り替えます)。

0
Jigarius