Untuk mengirim permintaan ke OSS melalui Android SDK, Anda perlu mengonfigurasi kredensial akses. Pilih penyedia kredensial yang sesuai berdasarkan kebutuhan autentikasi dan otorisasi Anda.
Prasyarat
OSS Android SDK telah diinstal. Instal Android SDK.
Inisialisasi penyedia kredensial
Pilih penyedia kredensial
OSS mendukung beberapa metode inisialisasi penyedia kredensial. Pilih salah satu yang paling sesuai dengan skenario Anda.
Perangkat mobile merupakan lingkungan yang tidak tepercaya. Setiap kredensial akses penuh—baik berupa pasangan AccessKey jangka panjang maupun token STS sementara—yang sampai ke klien dapat diekstraksi melalui reverse engineering atau debugging waktu proses. Untuk meminimalkan risiko kebocoran data, struktur jalur akses antara aplikasi mobile Anda dan OSS sebagai berikut:
-
Simpan pasangan AccessKey jangka panjang di server aplikasi Anda. Jangan pernah mengirimkannya ke klien mobile.
-
Buat aplikasi mobile mengambil kredensial sementara STS atau URL yang ditandatangani (presigned URL) dari server aplikasi sebelum memanggil OSS.
-
Saat menggunakan kredensial sementara STS, terapkan kebijakan RAM yang membatasi izin hanya pada awalan path objek milik satu pengguna, dan atur periode validitas yang singkat.
-
Untuk unggah dan unduh data sensitif seperti kartu identitas, gambar wajah, kredensial pembayaran, atau catatan medis, buat server aplikasi Anda menghasilkan presigned URL untuk digunakan oleh aplikasi mobile. Aplikasi mobile itu sendiri tidak pernah menyimpan kredensial apa pun. Untuk detail tentang presigned URL, lihat Otorisasi akses (Android SDK).
|
Metode inisialisasi penyedia kredensial |
Skenario |
Memerlukan pasangan AccessKey atau token STS yang telah dikonfigurasi sebelumnya |
Jenis kredensial dasar |
Masa berlaku kredensial |
Metode rotasi atau refresh kredensial |
|
Lingkungan aman dan stabil yang tidak rentan terhadap serangan eksternal serta memerlukan akses jangka panjang tanpa rotasi kredensial yang sering. |
Ya |
AccessKey |
Jangka panjang |
Rotasi manual |
|
|
Lingkungan tidak tepercaya di mana Anda perlu mengontrol masa berlaku dan izin kredensial. |
Ya |
Token STS |
Temporary |
Kustom |
|
|
Aplikasi yang memperoleh kredensial dari sistem eksternal. |
Tidak |
Token STS |
Temporary |
Auto-refresh |
Metode 1: Gunakan pasangan AccessKey
Gunakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dari Akun Alibaba Cloud atau Pengguna RAM untuk menginisialisasi penyedia kredensial. Metode ini cocok untuk lingkungan aman dan stabil yang memerlukan akses OSS jangka panjang tanpa rotasi kredensial yang sering. Namun, pemeliharaan kunci secara manual menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan. Untuk mendapatkan pasangan AccessKey, panggil CreateAccessKey - Buat pasangan AccessKey untuk Akun Alibaba Cloud atau Pengguna RAM.
Metode ini tidak direkomendasikan untuk klien mobile. Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Jika pasangan AccessKey Akun Alibaba Cloud bocor, sistem Anda menghadapi risiko keamanan yang tinggi. Jika Anda harus menggunakan metode ini, gunakan pasangan AccessKey dari Pengguna RAM dengan izin minimum yang diperlukan.
Kode contoh
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(ak, sk);
Metode 2: Gunakan token STS
Gunakan kredensial sementara dari STS untuk menginisialisasi penyedia kredensial. Metode ini cocok untuk aplikasi yang memerlukan akses sementara ke OSS dengan kontrol izin detail halus dan real-time. Kredensial tersebut mencakup ID AccessKey, Rahasia AccessKey, dan token STS. Pemeliharaan token secara manual menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan. Untuk mendapatkan token STS, panggil AssumeRole - Dapatkan kredensial identitas sementara untuk Peran RAM.
Contoh berikut menunjukkan cara memperbarui token STS secara manual atau otomatis.
Perbarui token STS secara manual
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
String token = "<ALIBABA_CLOUD_SECURITY_TOKEN>";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(ak, sk, token);
Perbarui token STS secara otomatis
OSSCredentialProvider credentialProvider = new OSSFederationCredentialProvider() {
@Override
public OSSFederationToken getFederationToken() {
/* Dapatkan ID AccessKey, Rahasia AccessKey, token STS, dan waktu kedaluwarsa.
* Contoh berikut menunjukkan cara mendapatkan kredensial dari server aplikasi:
* URL stsUrl = new URL("<server_url>");
* HttpURLConnection conn = (HttpURLConnection) stsUrl.openConnection();
* InputStream input = conn.getInputStream();
* String jsonText = IOUtils.readStreamAsString(input, OSSConstants.DEFAULT_CHARSET_NAME);
* JSONObject jsonObjs = new JSONObject(jsonText);
* String ak = jsonObjs.getString("AccessKeyId");
* String sk = jsonObjs.getString("AccessKeySecret");
* String token = jsonObjs.getString("SecurityToken");
* String expiration = jsonObjs.getString("Expiration");
*/
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
String token = "<ALIBABA_CLOUD_SECURITY_TOKEN>";
String expiration = "<ALIBABA_CLOUD_EXPIRATION>";
// Buat objek OSSFederationToken dari ID AccessKey, Rahasia AccessKey, token STS, dan waktu kedaluwarsa.
OSSFederationToken federationToken = new OSSFederationToken(ak, sk, token, expiration);
return federationToken;
}
};
Metode 3: Gunakan CredentialsURI
Gunakan CredentialsURI untuk menginisialisasi penyedia kredensial ketika aplikasi Anda perlu memperoleh kredensial dari sistem eksternal demi manajemen kredensial yang fleksibel dan akses tanpa kunci. Implementasi dasarnya menggunakan token STS. Tool Credentials menggunakan URI yang Anda berikan untuk mengambil token STS dan menginisialisasi klien. Hal ini menghilangkan kebutuhan untuk menyediakan pasangan AccessKey atau token STS secara langsung.
-
URI harus mengembalikan respons yang sesuai dengan protokol berikut:
-
Kode status respons: 200
-
Struktur isi respons:
{ "StatusCode":200, "AccessKeyId":"AccessKeyId", "AccessKeySecret":"AccessKeySecret", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"SecurityToken" }
-
-
Konfigurasikan kredensial URI sebagai kredensial akses.
String authServerUrl = "<remote_url>"; OSSAuthCredentialsProvider credentialProvider = new OSSAuthCredentialsProvider(authServerUrl); /* Jika datanya dienkripsi, Anda dapat menggunakan kode berikut untuk mendekripsinya. * credentialProvider.setDecoder(new OSSAuthCredentialsProvider.AuthDecoder() { * @Override * public String decode(String data) { * String result = null; * // Dekripsi data. * // result = ... * return result; * } * }); */