1

私はPythonでいくつかのGoogle Cloud Endpointを書いており、Firebaseを使って認証されたユーザからの呼び出しを要求するためにfollowed the directionsを持っています。 JavaScriptを使用してWebアプリケーションからエンドポイントに呼び出す必要がありますが、認証が機能しないようです。JavascriptからFirebase認証クラウドエンドポイントを呼び出すには?

Google APIs client(gapi)を使用したいと思います。これには、提供されたディスカバリドキュメントからクライアントライブラリを動的に生成するという利点があります。私がgapiクライアントを使用しようとすると、私のAPIへの呼び出しをうまくすることができますが、HTTP 401が応答として返され、HTTP認証されていないメッセージが返されます。

件名に関するGoogleのドキュメントはあまり疎です。私はone tutorial on the subjectから標準のAjax呼び出しを使用することができますが、GapiからFirebaseの認証済みエンドポイントを呼び出す方法に関するドキュメントは表示されません。私の現在の懸念は、発見文書の使用を可能にするためにgapiクライアントが(まだ)設定されておらず、Firebase Authが要求するようにAuthorizationヘッダーを設定できることです。

私が試みていることは可能ですか?

何か提案がありがとうございます。おそらく、Firebase Authenticatedエンドポイントを呼び出すことは、gapiクライアントを使用して行うことはできません。ここで

は私のGAPI jsのコードの大まかな概要です:私はしばらくの間、これで苦労してきた

function(token) { 
     gapi.client.init({ 
      apiKey: 'MY_API_KEY', 
      discoveryDocs: [MY_DISCOVERY_DOC_URL'], 
      clientId: 'MY_WEB_CLIENT_ID', 
      scope: 'profile' 
     }).then(function(){ 
      return gapi.client.my.server.api.call(); 
     }).then(function(response){ 
      console.log(response.result.data) 
     }, function(reason){ 
      console.log('Error: ' + reason.result.error.message) 
     }); 
    } 

答えて

0

は今、最終的にはそれが動作しました。あなたはgapi.clientライブラリを使用したい場合は

オプション1):私は2つのオプションが見つかっ gapi.client.setToken(tokenObject)と呼ばれる方法があります - documentation

しかし、新しいのようです( '17年7月)、少しの資料や例があります。 documentation - 私はjQueryのAjaxリクエストを使用します)オプション2

// any time auth state changes, add the user data to scope 
$scope.auth.$onAuthStateChanged(function (firebaseUser) { 
    $scope.firebaseUser = firebaseUser; 
    $scope.idToken = null; 

    // get the token from the firebase User Object 
    // Note that getToken() is deprecated and for me it did not work as desired 
    // use getIdToken() instead 
    firebaseUser.getIdToken().then(function (idToken) { 
     $scope.idToken = idToken; 
    }); 
}); 

// Now you can use setToken 
// If from the docs you were thinking firebase's getIdToken() gives me TokenObject and gapi's setToken() 
// expects a TokenObject so I'll just pass it - you'd be wrong! (at least for me - if it works for you please give me a heads up) 
// You'll need to build your own token: 
var homemadeToken = { 
    access_token: $scope.idToken.toString() // This feels so wrong 
}; 

gapi.client.setToken(homemadeToken); 
gapi.client.yourapi.getSomething().execute(function (resp) { 
    // Do stuff with the response 
    } 
); 
(これは角-火とangularJSであるが、私はあなたが私がやっているものを得る願って、基本的に「$範囲を」無視する)、それは次のことをやって働かせました

$.ajax(backendHostUrl + '/_ah/api/yourapi/v1/someendpoint', { 
    headers: { 
     'Authorization': 'Bearer ' + $scope.idToken // Here it worked without making a string first but I did not check why 
    }, 
    method: 'GET', 
    success: function (resp) { 
     // Do stuff with the response 
    } 
}); 

あなたのバックエンドがまだトークンを受け付けていませんし、あなたがV2にエンドポイントv1から移行したことを、すべての後に、それはmigrating again as described hereを助ける可能性がある場合。 Esp。 libフォルダが再度作成されていることを確認してください。 SDKを更新した後でも、v1からv2に移行した場合、「lib」フォルダは更新されたかどうかにかかわらず更新されません。

まだ機能していませんか? github pageは、以前のバージョンのBACKEND側で問題を修正しました。バックエンドはfirebaseトークンを受け入れず、ハッキングする必要がありました。前述のように変更を適用し、最新の "lib"フォルダ('17年7月の記事)users_id_token.pyを移行ガイドに従って使用する場合は、ファイルが変更されていることに注意してください。そのファイルの_verify_signed_jwt_with_certsメソッドで:

# Formerly we would parse the token body here. 
# However, it's not safe to do that without first checking the signature. 

署名をチェックする前にトークンを解析します。そのファイルのコメントから、Googleが論理全体を他の場所に置くことを望んでいると推測することができます。

+0

このような古い質問にお返事いただきありがとうございます。あなたのオプション#2に似たAjaxコールを使用して、この問題を回避しました。おそらく今、私は戻ってライブラリーを更新したように、gapi呼び出しを使用します。 – HondaGuy

関連する問題