Contoh Aplikasi One-Time Password (OTP)


Umumnya, otentikasi dua faktor menggunakan sebuah one-time password (OTP) yang mengkombinasikan sesuatu yang diketahui oleh pengguna (nama pengguna dan kata kunci) dan sesuatu yang pengguna miliki (biasanya sebuah token atau key fob yang memproduksi enam digit angka yang valid untuk jangka waktu yang pendek dan tersedia sesuai permintaan).

Jika bisnis kamu sudah menggunakan otentikasi dua faktor, maka kamu pasti sudah mengetahui tentang masalah seputar kegunaan dan logistik token. Mengganti token yang hilang atau rusak dan pengguna salah mengetik one-time password mereka adalah dua hal yang memusingkan saat ini yang berimbas pada help desk dan departemen TI.

Intel Identity Protection Technology (Intel IPT) dengan OTP adalah sebuah built-in hardware token (dari pilihan vendor keamanan anda) yang meniadakan keperluan memisahkan token fisik terpisah sehingga menyederhanakan proses log-in VPN dua faktor agar tercipata pengalaman yang mulus tanpa penundaan secara virtual.

otp demo

Kode dan Penjelasan

OTP memiliki 3 fungsionalitas utama: penyediaan OTP, pembuatan OTP, dan verifikasi OTP. Terdapat juga API untuk meng-query kapabilitas OTP dan versi OTP pada sistem.

Penyediaan OTP

InvokeIPTProv memperpanjang AsyncTask untuk mengeksekusi penyediaan pada latar. Pertama ia membuat layanan keamanan (Provision Service) dan lalu memulai prose penyediaan.

@Override
protected Void doInBackground(Void... params) {
	ChaabiProvision prov = new ChaabiProvision();
	try {
		prov.execute().get(PROV_MAX_TIMEOUT, TimeUnit.MILLISECONDS);
	} catch (InterruptedException e) {
		error = "Provisioning failed: " + e.getClass().getName() + ": "
				+ e.getLocalizedMessage();
		e.printStackTrace();
	} catch (ExecutionException e) {
		error = "Provisioning failed: " + e.getClass().getName() + ": "
				+ e.getLocalizedMessage();
		e.printStackTrace();
	} catch (TimeoutException e) {
		error = "Provisioning failed: " + e.getClass().getName() + ": "
				+ e.getLocalizedMessage();
		e.printStackTrace();
	}
	return null;
}

Pembuatan OTP

Sebelum kita mulai membuat OTP, kita perlu mengecek apakah perangkatnya sudah berhasil menyelesaikan proses penyediaan.

// Baca token jika ada
if (!readData()) {
	tvOTPGenerate
			.setText("OTP generation failed: No token exists. Please do provisioning.");
	return;
}

Lalu kita memanggil panggilan Async untuk membuat OTP.

boolean invokeResyncGenerateOTP(IPTWrapper obj) {
	try {
		// Kirim permintaan ke server untuk sync ulang pesan dan proses pesan yang didapat
		InvokeIPTResync ipt_obj = new InvokeIPTResync();
		boolean status = ipt_obj.execute().get();
		if (status) {

			// Proses pesan hasil sync ulang di server
			obj.ProcessResyncMessage(encrToken_b64, serverResyncMessage);

			// Panggil lagi pembuatan OTP
			// Cek jika token bertipe OCRA
			if (tokenInfo
					.equalsIgnoreCase(OTPDemoActivity.OCRA_TOKEN_INFO)) {
				invokeGenerateOTP(obj, true);
			} else {
				invokeGenerateOTP(obj, false);
			}
			displayOTP();
			progressDialog.dismiss();
		} else {
			String error = "Receive server resync message failed.";
			tvOTPGenerate.setText(error);
			progressDialog.dismiss();
			OTPDemoActivity.OTP = null;
			return false;
		}
	} catch (IhaException e) {
		String error = "OTP generation failed. Message: "
				+ e.getLocalizedMessage() + " Error code: " + e.GetError();
		tvOTPGenerate.setText(error);
		progressDialog.dismiss();
		OTPDemoActivity.OTP = null;
		return false;
	} catch (Exception e) {
		String error = "OTP generation failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		tvOTPGenerate.setText(error);
		progressDialog.dismiss();
		OTPDemoActivity.OTP = null;
		return false;
	}
	return true;
}

Verifikasi OTP

Setelah OTP dibuat, kita dapat mengecek apakah OTP-nya valid.

	ChaabiOTPVerify otp_ver = new ChaabiOTPVerify();
	try {
		otp_ver.execute()
				.get(OTP_VERIFY_TIMEOUT, TimeUnit.MILLISECONDS);
	} catch (InterruptedException e) {
		error = "OTP verification failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		e.printStackTrace();
	} catch (ExecutionException e) {
		error = "OTP verification failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		e.printStackTrace();
	} catch (TimeoutException e) {
		error = "OTP verification failed: " + e.getClass().getName()
				+ ": " + e.getLocalizedMessage();
		e.printStackTrace();
	}
	return null;	} catch (JSONException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	} catch (UnsupportedEncodingException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	} catch (ClientProtocolException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	} catch (IOException e) {
		error = e.getClass().getName() + ": " + e.getLocalizedMessage();
		status = false;
		e.printStackTrace();
	}
	Log.v(LOG_TAG, "Return results: " + status);
	return status;
}

Kesimpulan

Dengan mengimplementasikan kode seperti pada contoh di artikel ini, kamu dapat dengan cepat belajar bagaimana cara menggunakan Intel IPT dengan API one-time password untuk memanfaatkan OTP berbasis perangkat keras pada perangkat Android berbasis Intel.

Untuk contoh kode aplikasi pada artikel ini dapat diunduh dengan mengklik link ini.

* Artikel ini adalah hasil sindikasi konten dengan Intel Developer Zone. Artikel asli bisa dilihat di link ini.