บทความนี้จะต่อจาก เขียนคำสั่ง Authentication Google API Client part 1 down load p12 file เราได้ p12 file มาแล้ว ก็สามารถที่จะเขียนคำสั่ง Java เพื่อทำการขอสิทธิ์ใช้งาน service ต่างๆ ของ Google ได้เลยครับ
ในตัวอย่างนี้จะใช้ IntelliJ IDA 14 และ Gradle สำหรับ editor อื่นๆ เช่น NetBean หรือ Eclipse ก็สามารถใช้งานร่วมกันได้ครับ
เป็น IntelliJ IDEA สร้าง Gradle ใหม่ขึ้นมา โดยกำหนดค่าต่างๆ ดังนี้
เมื่่อสร้าง project ใหม่เรียบร้อยแล้ว ให้แก้ไข build.gradle เป็นดังนี้
group 'com.codesanook.sample.googleauthentication'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'application'
sourceCompatibility = 1.5
mainClassName = "com.codesanook.sample.googleauthentication.Program"
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.api-client:google-api-client:1.21.0'
}
ให้ทำการสร้าง class Program ขึ้นมา โดยมีขั้นตอนดังนี้
แก้ไข file Program.java เป็นดังนี้
package com.codesanook.sample.googleauthentication;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collection;
public class Program {
//get these from developer console
private static final String SERVICE_ACCOUNT_EMAIL = "[email protected]";
private static final String P12_FILE_PATH = "c:/codesanook-test-service-key.p12";
//1 Build service account credential.
private static GoogleCredential createCredentail(Collection<String> scopes) throws GeneralSecurityException, IOException {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
File file = new File(P12_FILE_PATH);
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(scopes)
.setServiceAccountPrivateKeyFromP12File(file)
.build();
return credential;
}
//2 get service scopes
public static Collection<String> getScopes() {
java.util.Set<String> set = new java.util.HashSet<String>();
set.add("https://www.googleapis.com/auth/devstorage.read_only");
return java.util.Collections.unmodifiableSet(set);
}
//3 use credential
public static void main(String[] args) throws GeneralSecurityException, IOException {
GoogleCredential credential = createCredentail(getScopes());
//other Service client will use this credentail
}
}
ให้ไปที่ developer console ไปที่ menu ที่อยู่มุมบนซ้ายของหน้าจอ > เลือก Permissions > เลือก Tab Service Account > copy email ของ service account ที่เราต้องการใช้ดังในรูปได้เลยครับ
กล่าวโดยสรุป หลักการทำงานการ Authentication Google API ก็คือ สร้าง GoogleCredential กำหนด scope แล้วสร้างตัว Service client โดยใช้ credential แล้วนำ service client ไปใช้งาน ยกตัวอย่างสำหรับ Storage client ก็เป็นการสร้าง แก้ไข อ่าน file เป็นต้น