我在Android应用程序中生成自定义jwt令牌,并使用firebase signinwithcustomtoken()登录。令牌中的用户ID是手机号码。我正在根据firebase文档中提供的标准创建自定义令牌。但我仍然得到FirebaseAuthInvalidCredentialsException:自定义令牌格式不正确'。
@OnClick(R.id.sign_in_button)
public void Logingin_function() {
try{
// Map<String,Object> claims = new HashMap<String,Object>();
String mobNumber = mobileNoEntry.getText().toString();
final String issuer = "firebase-adminsdk-icjsk@buddy-plans.iam.gserviceaccount.com";
final String sub = "firebase-adminsdk-icjsk@buddy-plans.iam.gserviceaccount.com";
final String aud = "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit";
//final long iat = System.currentTimeMillis() / 1000L;
//final long exp = iat + 60L;
long timeMillis = System.currentTimeMillis();
long timeSeconds = TimeUnit.MILLISECONDS.toSeconds(timeMillis);
long expSeconds = timeSeconds + 60L;
// claims.put("uid",mobNumber);
//Key key = MacProvider.generateKey();
KeyPairGenerator keyGen = null;
keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(512);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
compactJws = Jwts.builder()
.claim("iss", issuer)
.claim("aud",aud)
.claim("alg","RS256")
.claim("iat", timeSeconds)
.claim("exp", expSeconds)
.claim("uid",mobNumber)
.setSubject(sub)
.signWith(SignatureAlgorithm.RS256, priv)
.compact();
mAuth.signInWithCustomToken(compactJws).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isComplete())
Log.d(TAG, "Signed in with custom token");
else
Log.d(TAG, "Cannot Sign in with custom token");
}
});
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
我面临的例外:
com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The custom token format is incorrect. Please check the documentation.
我知道理想情况下我应该在服务器端代码中使用firebase admin sdk。我想根据我的要求处理客户端的所有事情。请帮忙。提前致谢。