【发布时间】:2018-06-11 02:16:11
【问题描述】:
我有一个 UID 为 1 的用户,其中自定义声明设置为,
frompos=true
我正在通过 ADMIN SDK for java 为该用户设置新的自定义声明,方法如下:
Map<String,Object> claims = new HashMap<>();
claims.put("frompos",false);
FirebaseAuth.getInstance().setCustomUserClaimsAsync("1", claims).get(10000,
TimeUnit.MILLISECONDS);
我在服务器端打印声明以检查声明是否已设置:
UserRecord user = FirebaseAuth.getInstance().getUserAsync("1").get(10000,
TimeUnit.MILLISECONDS);
LOG.debug("user new claims " + user.getCustomClaims());
预期的结果是声明被设置:
user new claims {frompos=false}
现在在 android sdk 端,我的用户已经登录,所以我手动刷新 ID 令牌以传播文档所说的声明 (https://firebase.google.com/docs/auth/admin/custom-claims)
FirebaseAuth.getInstance().getCurrentUser().getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
@Override
public void onComplete(@NonNull Task<GetTokenResult> task) {
if(task.isSuccessful()){
Log.d("FragmentCreate","Success refreshing token "+(FirebaseAuth.getInstance().getCurrentUser()==null));
Log.d("FragmentCreate","New token "+task.getResult().getToken());
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("FragmentCreate","Failure refreshing token "+(FirebaseAuth.getInstance().getCurrentUser()==null)+" "+e.toString());
}
});
现在我使用此处打印的打印 ID 令牌并在服务器端对其进行验证并从中打印声明
FirebaseToken tokenTest = FirebaseAuth.getInstance(ahmedabadRepoApp).verifyIdTokenAsync(token).get(10000,TimeUnit.MILLISECONDS);
LOG.debug("Token claims are "+tokenTest.getClaims());
但此处打印的声明是:
{"aud":"ahmedabadrepo","auth_time":1514724115,"email_verified":false,"exp":1514730425,"iat":1514726825,"iss":"https://securetoken.google.com/ahmedabadrepo","sub":"1","frompos":true,"user_id":"1","firebase":{"identities":{},"sign_in_provider":"custom"}}
因此,即使我手动刷新了 Id 令牌,frompos 值也不会传播到客户端 sdk。
【问题讨论】:
-
在管理员端设置声明后是否强制刷新令牌?在某些时候,您似乎成功设置了“frompos”,因为它出现在 ID 令牌中,但显示为不同的值。
-
我使用自定义令牌登录,并将 frompos 设置为 true。然后通过管理员更改并在那里打印。然后我强制刷新客户端。即使管理员 sdk 将其设置为 false,此处的值仍然保持为 true
-
你有这方面的更新吗?
-
不幸的是,我在他们的支持下提出了一张票,但他们无法复制它。不得不放弃这个想法,现在我在我的过程中使用了一种新方法。这对我来说似乎是一个明确的错误
标签: android firebase firebase-authentication