我正在使用Firebase身份验证和Cloud Endpoints Frameworks。 在此背景下,我有两个问题属于一起:
在我的Android应用中,我按以下方式成功登录后请求访问令牌:
FirebaseUser user = mFirebaseAuthenticator.getCurrentUser();
user.getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
mIDToken = task.getResult().getToken();
Log.d("attempLogin", "GetTokenResult result = " + mIDToken);
} else {
Log.d("attempLogin", "Cannot get token = " + task.getException());
}
}
});
然后我将收到的访问令牌传递给自动生成的 端点框架客户端API方法 allOrdersRequest(...)
OrderCollection orders = allOrdersRequest.setOauthToken(mIDToken).execute();
执行有效且授权的后端API调用。
第一个问题: 收到的访问令牌大约有800个字符,在我看来 相对太多了。它几乎是1kb,必须与每个后端API方法请求一起发送。我的假设是正确的,还是应该(甚至可以)改变Firebase控制台中的访问令牌大小?
第二个问题: 是否是将收到的令牌传递给端点框架客户端API的 setOauthToken()方法以执行授权的API请求的正确方法,或者每次都必须操纵 allOrdersRequest的httpheader ()
答案 0 :(得分:1)
我找到了授权云端点API请求的正确方法:
使用我生成的云终端客户端 API请求中的方法 setOauthToken()(在此示例中,方法 allOrdersRequest()为后端api方法)是错误的方法。 相反,有必要指定&#34;授权&#34;典型承载的http标头字段,并在REST API请求(端点客户端API)中为其分配请求的Firebase访问令牌(idToken)
以下是一个例子:
//启动云端点客户端API构建器 Endpoint.Builder endpoint = new Endpoint.Builder(AndroidHttp.newCompatibleTransport(),new GsonFactory(),null); endpoint.setRootUrl(&#34; https://my_project_id.appspot.com/_ah/api/&#34); endpoint.setApplicationName(&#34; my_project_id&#34);
Endpoint service = endpoint.build();
HttpHeaders authorizationHeader = new HttpHeaders();
authorizationHeader.setAuthorization("Bearer " + mAccessToken);
// Model instance
OrderRequest orderRequest = new OrderRequest();
orderRequest.setBagId(35);
orderRequest.setPriority(9);
orderRequest.setCustomer("foo@bar.com");
try {
Endpoint.ProcesOrderRequest request = service.procesOrderRequest(orderRequest);
request.setRequestHeaders(authorizationHeader);
Order order = request.execute();
Log.d("ExecuteAPIRequest", "OrderId result = " + order.getOrderId());
} catch (IOException ex) {
System.out.println("Exception caught: " + ex.getMessage());
}