Android SDK üzerinden OSS'e istek göndermek için erişim kimlik bilgilerini yapılandırın. Kimlik doğrulama ve yetkilendirme gereksinimlerinize bağlı olarak farklı kimlik bilgi sağlayıcılarını seçebilirsiniz.
Ön koşullar
OSS Android SDK yüklüdür. Android SDK'yı yükleyin.
Kimlik bilgi sağlayıcısını başlatma
Bir kimlik bilgi sağlayıcısı seçin
OSS, birden fazla kimlik bilgi sağlayıcısı başlatma yöntemini destekler. Senaryonuzuna uygun bir yöntem seçin.
Mobil cihazlar güvenilmeyen ortamlardır. Uzun süreli bir AccessKey çifti veya geçici bir STS belirteci gibi tam erişim sağlayan herhangi bir kimlik bilgisinin istemciye ulaşması durumunda, bu bilgiler tersine mühendislik veya çalışma zamanı hata ayıklama yoluyla ele geçirilebilir. Veri sızıntısı riskini azaltmak için mobil uygulamanız ile OSS arasındaki erişim yolunu aşağıdaki şekilde yapılandırın:
Uzun süreli AccessKey çiftlerini uygulama sunucunuzda saklayın. Bunları asla mobil istemciye göndermeyin.
Mobil uygulamanın OSS'i çağırmadan önce uygulama sunucunuzdan bir STS geçici kimlik bilgisi veya önceden imzalanmış URL almasını sağlayın.
STS geçici kimlik bilgilerini kullanırken, izinleri tek bir kullanıcının nesne yolu ön ekiyle sınırlayan bir RAM ilkesi uygulayın ve kısa bir geçerlilik süresi belirleyin.
Kimlik kartları, yüz görüntüleri, ödeme kimlik bilgileri veya tıbbi kayıtlar gibi hassas verilerin yüklenmesi ve indirilmesi için, uygulama sunucunuzun mobil uygulama tarafından kullanılacak bir önceden imzalanmış URL oluşturmasını sağlayın. Mobil uygulamanın kendisi hiçbir zaman bir kimlik bilgisi tutmamalıdır. Önceden imzalanmış URL'ler hakkında ayrıntılı bilgi için bkz. Erişimi yetkilendirme (Android SDK).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yöntem 1: AccessKey çifti kullanma
Kimlik bilgi sağlayıcısını başlatmak için bir Alibaba Cloud hesabının veya bir RAM kullanıcısının AccessKey çiftini (AccessKey ID ve AccessKey secret) kullanın. Bu yöntem; güvenli, kararlı ortamlar ile sık kimlik bilgisi döndürmesine ihtiyaç duymayan uzun süreli OSS erişimi gerektiren senaryolar için uygundur. Manuel anahtar bakımı güvenlik riskleri oluşturur ve bakım karmaşıklığını artırır. Bir AccessKey çifti elde etmek için CreateAccessKey - Alibaba Cloud hesabı veya RAM kullanıcısı için AccessKey çifti oluşturma işlemini çağırın.
Bu yöntem mobil istemciler için önerilmez. Bir Alibaba Cloud hesabı tüm kaynaklar üzerinde tam izne sahiptir. Bir Alibaba Cloud hesabının AccessKey çiftinin sızması durumunda sisteminiz yüksek güvenlik riskleriyle karşı karşıya kalır. Bu yöntemi kullanmanız gerekirse, minimum gerekli izinlere sahip bir RAM kullanıcısının AccessKey çiftini kullanın.
Örnek kod
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
CredentialProvider credentialProvider = new DefaultCredentialProvider(ak, sk);
Yöntem 2: STS belirteci kullanma
Kimlik bilgi sağlayıcısını başlatmak için STS'den gelen geçici kimlik bilgilerini kullanın. Bu yöntem; geçici OSS erişimi gerektiren ve ince taneli, gerçek zamanlı izin kontrolüne ihtiyaç duyan uygulamalar için uygundur. Kimlik bilgileri bir AccessKey ID, bir AccessKey secret ve bir STS belirteci içerir. Manuel belirteç bakımı güvenlik riskleri oluşturur ve bakım karmaşıklığını artırır. Bir STS belirteci elde etmek için AssumeRole - RAM rolü için geçici kimlik bilgileri alma işlemini çağırın.
Aşağıdaki örnekler, STS belirtecini manuel veya otomatik olarak nasıl güncelleyeceğinizi gösterir.
STS belirtecini manuel olarak güncelleme
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);
STS belirtecini otomatik olarak güncelleme
CredentialProvider credentialProvider = new OSSFederationCredentialProvider() {
@Override
public OSSFederationToken getFederationToken() {
/* Obtain the AccessKey ID, AccessKey secret, STS token, and expiration time.
* The following example shows how to obtain the credentials from an application server:
* 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>";
// Construct an OSSFederationToken object from the AccessKey ID, AccessKey secret, STS token, and expiration time.
OSSFederationToken federationToken = new OSSFederationToken(ak, sk, token, expiration);
return federationToken;
}
};
Yöntem 3: CredentialsURI kullanma
Uygulamanızın esnek kimlik bilgisi yönetimi ve anahtarsız erişim için kimlik bilgilerini harici bir sistemden alması gerektiğinde kimlik bilgi sağlayıcısını başlatmak için CredentialsURI kullanın. Altta yatan uygulama bir STS belirteci kullanır. Credentials aracı, sağladığınız URI'yi kullanarak bir STS belirteci alır ve istemciyi başlatır. Bu sayede bir AccessKey çiftini veya STS belirtecini doğrudan sağlamanıza gerek kalmaz.
remote_url (örnek kodda authServerUrl) kendi dağıttığınız bir arka uç hizmeti tarafından sağlanmalıdır. Bu, Alibaba Cloud tarafından sağlanan bir URL değildir. Credentials aracı bu URL'ye bir HTTP GET isteği gönderir ve arka uç hizmetiniz aşağıda açıklanan protokole uygun geçici kimlik bilgilerini döndürmelidir.
-
URI, aşağıdaki protokole uygun bir yanıt döndürmelidir:
Yanıt durum kodu: 200
-
Yanıt gövdesi yapısı:
{ "StatusCode":200, "AccessKeyId":"AccessKeyId", "AccessKeySecret":"AccessKeySecret", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"SecurityToken" }Yanıt gövdesinde,
StatusCodearka uç hizmetiniz tarafından 200 olarak ayarlanır.AccessKeyId,AccessKeySecret,ExpirationveSecurityTokenalanları, STS'ninAssumeRoleişlemi tarafından döndürülen Credentials nesnesinden gelir. Arka uç hizmetiniz bu değerleri almak içinAssumeRoleişlemini çağırmalı ve ardından bunları yanıt gövdesine dahil etmelidir.AssumeRolehakkında daha fazla bilgi için bkz. OSS'e erişmek için STS geçici erişim kimlik bilgilerini kullanma.
Örnek arka uç hizmeti (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 })Örnek arka uç hizmeti (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, }); -
URI kimlik bilgisini erişim kimlik bilgisi olarak yapılandırın.
String authServerUrl = "<remote_url>"; OSSAuthCredentialsProvider credentialProvider = new OSSAuthCredentialsProvider(authServerUrl); /* If the data is encrypted, you can use the following code to decrypt it. * credentialProvider.setDecoder(new OSSAuthCredentialsProvider.AuthDecoder() { * @Override * public String decode(String data) { * String result = null; * // Decrypt the data. * // result = ... * return result; * } * }); */