mục tiêu của tôi là xây dựng kết thúc động cơ ứng dụng đơn giản cho ứng dụng Android của tôi. Mục đích của phần cuối này chỉ là để xác minh các cuộc gọi của khách hàng Android và cung cấp mật khẩu sẽ được sử dụng để tiếp tục https comunication với các máy chủ của tôi. Vì vậy, tôi đã bắt đầu ccording bài viết này http://android-developers.blogspot.in/2013/01/verifying-back-end-calls-from-android.html. phía khách hàng trông giống như:Cách xác minh mã thông báo id Android trên phần phụ trợ của App Engine
GoogleAuthUtil.getToken(MainActivityy.this, "[email protected]", "audience:server:client_id:my_Client_ID_for_web_applications.apps.googleusercontent.com");
phương pháp này trả về thẻ mà trông như thế này:
eyJhbGciOiJSUzI1NiIsImtpZCI6ImFiMWIyZTllNGU2NGE0MmIzM2U3YjMxMDQwNzUyMzIxYmVlMmJkYmEifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiZW1haWwiOiJtYXRvLnBldHJ1bGFrQGdtYWlsLmNvbSIsInZlcmlmaWVkX2VtYWlsIjoidHJ1ZSIsImVtYWlsX3ZlcmlmaWVkIjoidHJ1ZSIsImNpZCI6IjU0ODk4MTY3NzkzMC0xcGxxamF2OWloOGU4MGJ0ZWdpYzg0YmcycjlxN2MwMi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImF6cCI6IjU0ODk4MTY3NzkzMC0xcGxxamF2OWloOGU4MGJ0ZWdpYzg0YmcycjlxN2MwMi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImF1ZCI6IjU0ODk4MTY3NzkzMC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlkIjoiMTE4MTQ0NjEyNDkzMTM1NzYxOTUwIiwic3ViIjoiMTE4MTQ0NjEyNDkzMTM1NzYxOTUwIiwiaWF0IjoxMzY4NzExODk0LCJleHAiOjEzNjg3MTU3OTR9.oN5ncz6MEAZBW8NXDhc4O-Y82C2mma675lbw9ZZA-1bs8zM9FKQG1K97PfNfxJFImiPMY8UYIjhqDIkHpErjaV0KDJpLv8NkmsdADOFjt5eQkFGWf92fufL7QEIkWqLL1fKxG7f8-OR59O5AOAVchdgtqDt4DhEH7oHfAZqf3wU
và bây giờ tôi muốn authentificate thẻ này trên backend. Vì vậy, tôi đã tạo một Dự án ứng dụng web mới bằng cách sử dụng plugin Google cho eclpise. Nó tạo ra một số dự án mẫu. Để dự án này tôi thêm lớp Checker từ bài viết mà tôi đã đề cập ở trên. trông như thế này:
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
public class Checker {
private final List mClientIDs;
private final String mAudience;
private final GoogleIdTokenVerifier mVerifier;
private final JsonFactory mJFactory;
private String mProblem = "Verification failed. (Time-out?)";
private Logger log ;
public Checker(String[] clientIDs, String audience) {
mClientIDs = Arrays.asList(clientIDs);
mAudience = audience;
NetHttpTransport transport = new NetHttpTransport();
mJFactory = new GsonFactory();
mVerifier = new GoogleIdTokenVerifier(transport, mJFactory);
log = Logger.getLogger(Checker.class.getName());
log.severe("CHECKER CRETAED");
}
public GoogleIdToken.Payload check(String tokenString) {
GoogleIdToken.Payload payload = null;
log.severe("CHECK START");
try {
log.severe("CHECK 1");
GoogleIdToken token = GoogleIdToken.parse(mJFactory, tokenString);
log.severe("CHECK 2");
if (mVerifier.verify(token)) {
log.severe("CHECK 3");
GoogleIdToken.Payload tempPayload = token.getPayload();
log.severe("CHECK4");
if (!tempPayload.getAudience().equals(mAudience)){
mProblem = "Audience mismatch";
log.severe("Audience mismatch");
}
else if (!mClientIDs.contains(tempPayload.getIssuee())){
mProblem = "Client ID mismatch";
log.severe("Client ID mismatch");
}
else{
payload = tempPayload;
log.severe(payload.getEmail().toString());
log.severe("CHECK 5");
}
}
} catch (GeneralSecurityException e) {
log.severe("Security issue: " + e.getLocalizedMessage());
mProblem = "Security issue: " + e.getLocalizedMessage();
} catch (IOException e) {
log.severe("Network problem: " + e.getLocalizedMessage());
mProblem = "Network problem: " + e.getLocalizedMessage();
}
log.severe("CHECK END");
return payload;
}
public String problem() {
return mProblem;
}
}
và bây giờ tôi làm điều gì đó như thế này để authentify thẻ được cung cấp bởi khách hàng Android.
String [] clinetidS = new String [] {"xxxxxxxxxxxxx-plqjav9ih8e80btegic84bg2r9q7c02.apps.googleusercontent.com"}; //Client ID for installed applications
Checker checker = new Checker(clinetidS, "my_project_at_appspot.appspot.com");
checker.check("eyJhbGciOiJSUzI1NiIsImtpZCI6ImFiMWIyZTllNGU2NGE0MmIzM2U3YjMxMDQwNzUyMzIxYmVlMmJkYmEifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiZW1haWwiOiJtYXRvLnBldHJ1bGFrQGdtYWlsLmNvbSIsInZlcmlmaWVkX2VtYWlsIjoidHJ1ZSIsImVtYWlsX3ZlcmlmaWVkIjoidHJ1ZSIsImNpZCI6IjU0ODk4MTY3NzkzMC0xcGxxamF2OWloOGU4MGJ0ZWdpYzg0YmcycjlxN2MwMi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImF6cCI6IjU0ODk4MTY3NzkzMC0xcGxxamF2OWloOGU4MGJ0ZWdpYzg0YmcycjlxN2MwMi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImF1ZCI6IjU0ODk4MTY3NzkzMC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlkIjoiMTE4MTQ0NjEyNDkzMTM1NzYxOTUwIiwic3ViIjoiMTE4MTQ0NjEyNDkzMTM1NzYxOTUwIiwiaWF0IjoxMzY4NzExODk0LCJleHAiOjEzNjg3MTU3OTR9.oN5ncz6MEAZBW8NXDhc4O-Y82C2mma675lbw9ZZA-1bs8zM9FKQG1K97PfNfxJFImiPMY8UYIjhqDIkHpErjaV0KDJpLv8NkmsdADOFjt5eQkFGWf92fufL7QEIkWqLL1fKxG7f8-OR59O5AOAVchdgtqDt4DhEH7oHfAZqf3wU");
và bây giờ vấn đề là Checker lớp không bao giờ vượt qua kiểm tra này:
if (mVerifier.verify(token))
là có một số cách làm thế nào để kiểm tra thẻ android trực tuyến ?? bất kỳ ý tưởng ?? hoặc nơi có thể là vấn đề ??
cảm ơn, khi tôi kiểm tra mã thông báo của mình không hợp lệ, do đó sự cố xảy ra trên trang web của khách hàng. do một số công việc với không gian làm việc, tôi đã ký ứng dụng của mình bằng cách nhấn phím tắt và đó là vấn đề. khi tôi đã ký nó với phím tắt thực sự tất cả mọi thứ làm việc tốt. –
@MatkoVonJazvecPetrulak, tôi cũng nhận ngoại lệ GeneralSecurityException trên phương thức tokenVerifier.verify (token). là cùng một vấn đề của debug keystore? –
@ Bipin Vayalu yes đó là vấn đề với debug keystore ... dù sao cũng không cố gắng đăng nhập địa chỉ email trên appengine backend của bạn ..tôi đã làm điều đó để thử nghiệm, quên để loại bỏ rằng từ mã của tôi và sau vài tháng google bị chặn tài khoản nhà phát triển của tôi (khoảng 200 000 tải) ...... Thats "google-phong cách" công lý –