programing

오류: Firebase ID 토큰이 만료되었습니다.

lastmoon 2023. 6. 6. 10:33
반응형

오류: Firebase ID 토큰이 만료되었습니다.

skd를 할 때 firebase admin skd를 사용합니다..verifyIdToken()

Firebase ID 토큰이 만료되었습니다.클라이언트 앱에서 새 토큰을 가져온 후 다시 시도하십시오.

Firebase ID 토큰에 알려진 공개 키와 일치하지 않는 "kid" 클레임이 있습니다.ID 토큰이 만료되었을 가능성이 높기 때문에 클라이언트 앱에서 새 토큰을 가져온 후 다시 시도하십시오.ID 토큰을 검색하는 방법에 대한 자세한 내용은 https://firebase.google.com/docs/auth/admin/verify-id-tokens 을 참조하십시오.

클라이언트 측에서는 브라우저 <> 서버 간의 모든 요청 전에 이 작업을 수행하고 있습니다.

firebase.auth().currentUser.getIdToken()

문서를 읽어보니 백그라운드의 SDK가 필요에 따라 새로 고쳐지기 때문에 이 기능은 유효하고 만료되지 않은 토큰을 얻을 것으로 알고 있습니다.선택적으로, 저는 당신을 대신해서true강제로 새로 고침하기 위해 이 함수에 추가합니다.

왜 그럴까요?getIdToken()함수가 만료된 토큰을 백엔드로 보내는 것 같습니까?

이 문제를 해결할 수 있을 것 같습니다. 제 옵션은 다음과 같습니다.

  1. 에 합니다.trueId를 호출할 때마다 강제로 새로 고침토큰().는 브라우저 <> 하게 비용이 듭니다.
  2. 을 부르다getIdToken()나의 방식 - 을 수동으로 한 후, 되면 지의내방식 - 언트측토에서 - 큰이을수로동고하디다, 료경전겁를니화우고만료된하금인확만를딩여코부으클라로 전화하세요.getIdToken(true) 새로 하고 새로 새로 을 내 서버로 보냅니다.

2번이 이 문제를 해결하는 권장/예상 방법입니까?여기 뭔가 잘못된 것 같아요

토큰은 일반적으로 한 시간 후에 만료됩니다. getIdToken캐시된 토큰이 만료되면 새로 고쳐집니다.토큰을 서버로 보내야 할 때는 항상 클라이언트에서 호출해야 합니다.토큰을 캐시하고 항상 백엔드로 보내면 토큰이 만료됩니다.

또한 만일의 경우를 대비하여 서버 시계가 동기화되어 있는지 확인합니다.가능성은 낮지만 어떤 이유로 시계가 동기화되지 않을 수 있습니다.

위에서 언급한 또 다른 가능한 해결책은 브라우저(또는 시스템) 날짜가 잘못되었다는 것입니다.거의 항상 날짜와 관련이 있습니까?

Error: Firebase ID token has expired

장치 시간이 잘못되면 이 오류가 발생합니다.장치 시계 시간도 확인합니다.

백엔드에서 토큰을 사용하는 경우 다음을 수행할 수 있습니다.

1.백엔드에서 토큰 확인

2. 토큰이 만료된 경우 401개를 무단으로 전송합니다.

3. 클라이언트에서 상태 코드가 401 무단인지 확인하고, 승인되지 않은 경우 호출합니다.getIdToken새로운 토큰을 저장합니다.

저는 약간의 시행착오를 겪기 전과 후에 같은 문제에 직면했고, 그것이 시간 동기화로 인한 것이라는 것을 알게 되었습니다.

컴퓨터 시간과 시간대를 자동으로 설정하여 문제를 해결했습니다.또한 getId에 "true"를 추가해야 합니다.토큰(참)

다음과 같은 방법을 사용해 보십시오.

Auth.auth().currentUser.getIDTokenForcingRefresh(true) { (token, err) in

/* your code to manage error and success */

}

토큰을 얻는 비동기 방법이 있다는 것을 눈치챘습니까?

            mAuth.getCurrentUser().getIdToken(false).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
            @Override
            public void onSuccess(GetTokenResult getTokenResult) {
                long time = System.currentTimeMillis() - starttime;

                Log.d("testt", "time " + time + ", token " + getTokenResult.getToken());
            }
        });

확실하지는 않지만 내부 검사를 수행하고 토큰이 더 이상 유효하지 않은 경우(예: 현재 사용자에 대한 새로 고침된 토큰 브로드캐스트가 있고 네트워크 문제 등의 이유로 사용자에게 도달하지 못한 경우) 새 토큰을 요청하고 반환합니다.

추신: 저는 이 주제에 대해서도 조사하고 있으며, 새로운 것을 발견할 수 있는지 업데이트할 것입니다.

언급URL : https://stackoverflow.com/questions/47803495/error-firebase-id-token-has-expired

반응형