Untuk mengirim permintaan ke OSS dari 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—berupa pasangan AccessKey jangka panjang atau token STS temporary—yang sampai ke client dapat diekstraksi melalui reverse engineering atau debugging waktu proses. Untuk mengurangi 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 client mobile.
-
Buat aplikasi mobile mengambil kredensial temporary STS atau URL yang ditandatangani (presigned URL) dari server aplikasi sebelum memanggil OSS.
-
Saat menggunakan kredensial temporary 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 KTP, 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 client mobile. Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Jika pasangan AccessKey Akun Alibaba Cloud bocor, sistem Anda menghadapi risiko keamanan 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>";
CredentialProvider credentialProvider = new DefaultCredentialProvider(ak, sk);
Metode 2: Gunakan token STS
Gunakan kredensial temporary dari STS untuk menginisialisasi penyedia kredensial. Metode ini cocok untuk aplikasi yang memerlukan akses OSS temporary 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 temporary 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>";
CredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(ak, sk, token);
Perbarui token STS secara otomatis
CredentialProvider 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 guna 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 client, sehingga menghilangkan kebutuhan untuk menyediakan pasangan AccessKey atau token STS secara langsung.
remote_url (authServerUrl dalam kode contoh) harus disediakan oleh layanan backend yang Anda deploy sendiri. Ini bukan URL yang disediakan oleh Alibaba Cloud. Tool Credentials mengirim permintaan HTTP GET ke URL ini, dan layanan backend Anda harus mengembalikan kredensial temporary yang sesuai dengan protokol yang dijelaskan di bawah.
-
URI harus mengembalikan respons yang sesuai dengan protokol berikut:
-
Kode status respons: 200
-
Struktur badan respons:
{ "StatusCode":200, "AccessKeyId":"AccessKeyId", "AccessKeySecret":"AccessKeySecret", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"SecurityToken" }Dalam badan respons,
StatusCodediatur ke 200 oleh layanan backend Anda. BidangAccessKeyId,AccessKeySecret,Expiration, danSecurityTokenberasal dari objek Credentials yang dikembalikan oleh operasiAssumeRoleSTS. Layanan backend Anda harus memanggilAssumeRoleuntuk mendapatkan nilai-nilai ini lalu memasukkannya ke dalam badan respons. Untuk informasi lebih lanjut tentangAssumeRole, lihat Gunakan kredensial akses temporary STS untuk mengakses OSS.
Layanan backend contoh (Python):
from alibabacloud_sts20150401.client import Client as StsClient from alibabacloud_sts20150401 import models as sts_models import json def get_credentials(): request = sts_models.AssumeRoleRequest( role_arn='<your_role_arn>', role_session_name='<your_session_name>' ) response = sts_client.assume_role(request) creds = response.body.credentials return json.dumps({ 'StatusCode': 200, 'AccessKeyId': creds.access_key_id, 'AccessKeySecret': creds.access_key_secret, 'Expiration': creds.expiration, 'SecurityToken': creds.security_token })Layanan backend contoh (Node.js):
const STS = require("@alicloud/sts20150401"); const stsClient = new STS.default({ accessKeyId: "<yourAccessKeyId>", accessKeySecret: "<yourAccessKeySecret>", endpoint: "sts.aliyuncs.com", }); const result = await stsClient.assumeRole("<roleArn>", "<sessionName>"); const creds = result.body.credentials; res.status(200).json({ StatusCode: 200, AccessKeyId: creds.accessKeyId, AccessKeySecret: creds.accessKeySecret, Expiration: creds.expiration, SecurityToken: creds.securityToken, }); -
-
Konfigurasikan kredensial URI sebagai kredensial akses.
String authServerUrl = "<remote_url>"; OSSAuthCredentialsProvider credentialProvider = new OSSAuthCredentialsProvider(authServerUrl); /* Jika data 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; * } * }); */