【问题标题】:Android: Firebase auth for Cloud End Point not workingAndroid:Cloud End Point 的 Firebase 身份验证不起作用
【发布时间】:2017-12-19 14:54:27
【问题描述】:

我已经关注link,并按照上面提到的在服务器上完成了配置。

"/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/securetoken@system.gserviceaccount.com"

通过 JWT 标准后,我知道在调用服务时,我们必须使用 Bearer 添加 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 错误

【问题讨论】:

    标签: android firebase firebase-authentication google-cloud-endpoints


    【解决方案1】:

    经过这么多天的奋斗,我能够解决这个问题。

    我按照这个解决了这个问题,

        "/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/securetoken@system.gserviceaccount.com"
    x-google-audiences: "<Project-ID>" //I have added this, this was the main culprit.
    

    正如评论中提到的,我错过了

    x-google-audiences: ""

    在服务器配置中。

    对于使用哪个令牌的另一个说明:我们必须使用我在问题中提到的第二种方法,即如下所示,

    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();
                        } 
                    }); 
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2021-12-20
      • 2017-02-28
      • 2020-12-15
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多