Java Firebase不验证IdToken
通过传递客户端(Web、Android和Postman)上使用的idToken调用后端时,会发生异常:Java Firebase不验证IdToken,java,firebase,spring-boot,firebase-authentication,firebase-admin,Java,Firebase,Spring Boot,Firebase Authentication,Firebase Admin,通过传递客户端(Web、Android和Postman)上使用的idToken调用后端时,会发生异常: { "timestamp": 1581447909769, "status": 401, "error": "Unauthorized", "message": "Authentication Failed: com.google.firebase.auth.FirebaseAuthException: Firebase ID token has expired
{
"timestamp": 1581447909769,
"status": 401,
"error": "Unauthorized",
"message": "Authentication Failed: com.google.firebase.auth.FirebaseAuthException: Firebase ID token has expired or is not yet valid. Get a fresh ID token and try again. See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token.",
"path": "/api/references"
}
后端能够访问firebase资源,例如:
FirebaseAuth.getInstance().getUser("SOME_ID")
只有在验证令牌时才会发生错误:
FirebaseAuth.getInstance().verifyIdToken(authenticationToken.getToken());
设置:
@Bean
public FirebaseAuth firebaseAuth() throws IOException {
InputStream inputStream = FirebaseAuthConfig.class.getClassLoader().getResourceAsStream("solicite-service-auth.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(inputStream))
.setDatabaseUrl("https://my-project-auth.firebaseio.com")
.build();
FirebaseApp.initializeApp(options);
return FirebaseAuth.getInstance();
}
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>6.12.1</version>
</dependency>
我已经删除并重新创建了服务帐户和项目。由于我可以通过SDK访问Firebase,我相信它的配置是正确的
身份验证在几个月前工作。错误消息告诉您传递的ID令牌无效。这里没有足够的信息来说明原因。“您必须进行一些调试,并找出为什么值不能像您预期的那样验证。@DougStevenson起初我认为问题出在客户机上。从那时起,我就开始使用邮递员来发出请求。我根据返回的json发出请求RESTAPI,检索idToken并发出请求将其传递到后端。我的后端仅在存在身份验证令牌时进行验证,如果它存在,它将尝试在Firebase中进行验证。我一直在调试库,但仍然找不到错误。我希望有人看到并说这是一个简单的错误,我忘了在firebase控制台上配置一些东西。它说您的令牌已过期或尚未生效(很可能是前者)。如果您确定ID令牌未过期,请确保您的服务器时钟已同步。@HiranyaJayathilaka问题实际上是服务器时钟和我桌面上的时钟。我在巴西,今年我们没有夏天。关键是我的机器是准时的,但火力基地是错误的。我不得不在我的计算机上添加一个小时,令牌开始工作,几天后firebase取消了夏令时,现在一切正常。错误消息告诉您传递的ID令牌无效。这里没有足够的信息来说明原因。“您必须进行一些调试,并找出为什么值不能像您预期的那样验证。@DougStevenson起初我认为问题出在客户机上。从那时起,我就开始使用邮递员来发出请求。我根据返回的json发出请求RESTAPI,检索idToken并发出请求将其传递到后端。我的后端仅在存在身份验证令牌时进行验证,如果它存在,它将尝试在Firebase中进行验证。我一直在调试库,但仍然找不到错误。我希望有人看到并说这是一个简单的错误,我忘了在firebase控制台上配置一些东西。它说您的令牌已过期或尚未生效(很可能是前者)。如果您确定ID令牌未过期,请确保您的服务器时钟已同步。@HiranyaJayathilaka问题实际上是服务器时钟和我桌面上的时钟。我在巴西,今年我们没有夏天。关键是我的机器是准时的,但火力基地是错误的。我不得不在我的电脑上加上一个小时,代币开始工作,几天后firebase取消了夏令时,现在一切都正常了。
{
"iss": "https://securetoken.google.com/my-project-auth",
"aud": "my-project-auth",
"auth_time": 1581453521,
"user_id": "SOME_USER_ID",
"sub": "SOME_USER_ID",
"iat": 1581453521,
"exp": 1581457121,
"email": "teste@teste.com",
"email_verified": false,
"firebase": {
"identities": {
"email": [
"teste@teste.com"
]
},
"sign_in_provider": "password"
}
}