Android:针对云端点的Firebase身份验证无法正常工作

问题描述:

我遵循link,并已完成上述服务器上的配置。Android:针对云端点的Firebase身份验证无法正常工作

"/users": 
post: 
    description: "<Description>" 
    operationId: "<OperationID>" 
    produces: 
    - "application/json" 
    responses: 
    200: 
     description: "user List" 
     schema: 
     $ref: "#/definitions/echoMessage" 
    parameters: 
    - description: "Search Criteria" 
    in: body 
    name: message 
    required: true 
    schema: 
     $ref: "#/definitions/echoMessage" 
    security: 
    - firebase: [] 

firebase: 
authorizationUrl: "" 
flow: "implicit" 
type: "oauth2" 
x-google-issuer: "https://securetoken.google.com/<Project-ID>" 
x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/[email protected]" 

并通过智威汤逊的标准去后,我才知道,同时呼吁调用服务,我们必须增加与承载Authorization头,所以我已经添加了标题如下,

授权:承载

我起初尝试了

String token = FirebaseInstanceId.getInstance().getToken(); 

但是所以我尝试它给了错误,

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); 
    if (firebaseUser != null) { 

     firebaseUser.getIdToken(true) 
       .addOnSuccessListener(new OnSuccessListener<GetTokenResult>() { 
        @Override 
        public void onSuccess(GetTokenResult getTokenResult) { 
         String token = getTokenResult.getToken(); 
         SharedPreferences.Editor editor = mSharedPreferences.edit(); 
         editor.putString(Constants.PREFS_FCM_TOKEN, token); 
         editor.apply(); 
        } 
       }); 
    } 

但即使有两个代码,我得到错误为401和INVALID_TOKEN

后奋斗了这么多天,我能解决问题。

我按照这个解决的问题,

"/users": 
post: 
    description: "<Description>" 
    operationId: "<OperationID>" 
    produces: 
    - "application/json" 
    responses: 
    200: 
     description: "user List" 
     schema: 
     $ref: "#/definitions/echoMessage" 
    parameters: 
    - description: "Search Criteria" 
    in: body 
    name: message 
    required: true 
    schema: 
     $ref: "#/definitions/echoMessage" 
    security: 
    - firebase: [] 

firebase: 
authorizationUrl: "" 
flow: "implicit" 
type: "oauth2" 
x-google-issuer: "https://securetoken.google.com/<Project-ID>" 
x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/[email protected]" 
x-google-audiences: "<Project-ID>" //I have added this, this was the main culprit. 

在注释中,我缺少

X-谷歌,观众: “”

在服务器配置中。

而对于另一个澄清为此令牌使用:我们使用的是我在这个问题提到的第二种方法,即,下面,

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser(); 
    if (firebaseUser != null) { 

     firebaseUser.getIdToken(true) 
       .addOnSuccessListener(new OnSuccessListener<GetTokenResult>() { 
        @Override 
        public void onSuccess(GetTokenResult getTokenResult) { 
         String token = getTokenResult.getToken(); 
         SharedPreferences.Editor editor = mSharedPreferences.edit(); 
         editor.putString(Constants.PREFS_FCM_TOKEN, token); 
         editor.apply(); 
        } 
       }); 
    }