Android yazılım geliştirme kiti (SDK), mobil cihazların güvenliğini sağlamak için STS kimlik doğrulama modu, kendi imzalı mod ve ön imzalı URL'ler sunar.
Arka plan bilgileri
Hem STS kimlik doğrulama hem de kendi imzalı modlarda, uyguladığınız geri arama işlevi çağrıldığında belirteci ve imzayı döndürmelidir. Belirteci ve imzayı almak üzere uygulama sunucunuza ağ isteği göndermek için ağ kitaplığının eşzamanlı API'sini çağırabilirsiniz. SDK bir istek başlattığında geri arama alt iş parçacığında çalışır; bu nedenle ana iş parçacığını engellemez.
STS kimlik doğrulama modu
Yetkilendirme için STS modunu kullanmak üzere öncelikle Alibaba Cloud Resource Access Management (RAM) hizmetini etkinleştirmeniz gerekir.
OSS'e geçici olarak yetkili erişim sağlamak için Alibaba Cloud Security Token Service (STS) hizmetini kullanabilirsiniz. STS, bulut bilişim kullanıcıları için geçici erişim belirteçleri sağlayan bir web hizmetidir. STS kullanarak, kimliğini yönettiğiniz üçüncü taraf bir uygulamaya veya birleşik bir kullanıcıya özel bir yaşam süresi (TTL) ve özel izinlere sahip erişim kimlik bilgisi verebilirsiniz. Daha fazla bilgi için bkz. STS Nedir?.
STS aşağıdaki avantajları sağlar:
Uzun vadeli AccessKey çiftinizi üçüncü taraf bir uygulamaya açmanıza gerek yoktur. Bunun yerine, uygulamaya sağlamak üzere özel erişim izinlerine ve belirli bir geçerlilik süresine sahip erişim belirteci oluşturabilirsiniz.
Erişim belirtecinin süresi dolduğunda otomatik olarak geçersiz hale geldiği için izin iptalini yönetmenize gerek kalmaz.
OSS'e geçici erişim izni vermek için STS'yi şu adımları izleyerek kullanın:
-
Geçici erişim kimlik bilgilerini edinin.
Geçici erişim kimlik bilgileri; bir AccessKey ID ve bir AccessKey Secret'tan oluşan geçici bir AccessKey çifti ile bir güvenlik belirtecini içerir. Geçici erişim kimlik bilgilerinin geçerlilik süresi saniye cinsinden ölçülür. Minimum değer 900'dür. Maksimum değer, mevcut RAM rolü için ayarlanan maksimum oturum süresidir. Daha fazla bilgi için bkz. RAM rolü için maksimum oturum süresini ayarlama.
Geçici erişim kimlik bilgilerini aşağıdaki iki yoldan biriyle edinebilirsiniz:
-
Yöntem 1
Geçici erişim kimlik bilgilerini almak için AssumeRole işlemini çağırın.
-
Yöntem 2
Geçici erişim kimlik bilgilerini almak için farklı diller için STS SDK'larını kullanın.
-
-
SDK'yı başlatmak için geçici erişim kimlik bilgilerini kullanın.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("StsToken.AccessKeyId", "StsToken.SecretKeyId", "StsToken.SecurityToken"); OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);SDK'yı geçici erişim kimlik bilgileriyle başlatırken StsToken'ın geçerlilik süresine dikkat edin.
Aşağıdaki kod, kalan geçerlilik süresi 5 dakikadan az olduğunda StsToken'ın nasıl güncelleneceğini gösterir:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); Date date = sdf.parse("<StsToken.Expiration>"); long expiration = date.getTime() / 1000; // If the StsToken is about to expire in less than 5 minutes, update the StsToken. if (DateUtil.getFixedSkewedTimeMillis() / 1000 > expiration - 5 * 60) { oss.updateCredentialProvider(new OSSStsTokenCredentialProvider("StsToken.AccessKeyId", "StsToken.SecretKeyId", "StsToken.SecurityToken")); }-
StsToken'ı manuel olarak güncelleme
StsToken'ın süresi dolmak üzereyken OSSClient'ı yeniden oluşturabilir veya CredentialProvider'ı aşağıdaki gibi güncelleyebilirsiniz:
oss.updateCredentialProvider(new OSSStsTokenCredentialProvider("StsToken.AccessKeyId", "StsToken.SecretKeyId", "StsToken.SecurityToken")); -
StsToken'ı otomatik olarak güncelleme
SDK'nın StsToken'ı otomatik olarak güncellemesini sağlamak için uygulamanızda bir geri arama işlevi uygulamanız gerekir. SDK, uyguladığınız geri aramayı çağırarak Federasyon Belirteci (StsToken) alır. SDK daha sonra imzalama için bu belirteci kullanır ve mevcut belirtecin süresi dolmak üzereyken yeni bir StsToken almak için geri aramayı çağırır.
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; OSSCredentialProvider credentialProvider = new OSSFederationCredentialProvider() { @Override public OSSFederationToken getFederationToken() { // Obtain the FederationToken and construct it as an OSSFederationToken object to return. If the FederationToken fails to be obtained for any reason, the server directly returns null. OSSFederationToken token; // Obtain the token from your server. return token; } }; OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);NotStsToken için gerekli alanları başka yollarla zaten elde ettiyseniz belirteci geri aramada doğrudan döndürebilirsiniz. Ancak StsToken güncellemesini manuel olarak yönetmeniz ve güncellemeden sonra OSSClient örneği için OSSCredentialProvider'ı sıfırlamanız gerekir.
Örneğin, http://localhost:8080/distribute-token.json adresindeki sunucuya erişirseniz aşağıdaki veriler döndürülür:
{ "StatusCode": 200, "AccessKeyId":"STS.iA645eTOXEqP3cg3****", "AccessKeySecret":"rV3VQrpFQ4BsyHSAvi5NVLpPIVffDJv4LojU****", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"CAES7QIIARKAAZPlqaN9ILiQZPS+JDkS/GSZN45RLx4YS/p3OgaUC+oJl3XSlbJ7StKpQ****"}Aşağıdaki örnek, OSSFederationCredentialProvider'ın nasıl uygulanacağını gösterir:
OSSCredentialProvider credetialProvider = new OSSFederationCredentialProvider() { @Override public OSSFederationToken getFederationToken() { try { URL stsUrl = new URL("http://localhost:8080/distribute-token.json"); 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"); return new OSSFederationToken(ak, sk, token, expiration); } catch (Exception e) { e.printStackTrace(); } return null; } };
-
Ön imzalı URL
Notlar
-
Bir OSS SDK kullanarak ön imzalı bir URL oluşturduğunuzda OSS SDK, yerel bilgisayarda depolanan anahtar bilgilerine dayalı olarak belirli bir algoritma kullanarak imza hesaplar ve URL'nin geçerliliğini ve güvenliğini sağlamak için bu imzayı URL'ye ekler. URL'yi hesaplama ve oluşturma işlemleri istemcide tamamlanır. Ağ üzerinden sunucuya istek göndermeniz gerekmez. Bu şekilde, ön imzalı URL'yi oluştururken çağrıana özel izinler vermeniz gerekmez. Ancak üçüncü taraf kullanıcıların ön imzalı URL tarafından yetkilendirilen kaynaklarda ilgili işlemleri gerçekleştirmesine olanak tanımak için ön imzalı URL'yi oluşturmak üzere API işlemlerini çağıran asılın ilgili izinlere sahip olduğundan emin olmalısınız.
Örneğin, bir asıl ön imzalı bir URL kullanarak nesne yüklemek istiyorsa asıla oss:PutObject iznini vermeniz gerekir. Bir asıl ön imzalı bir URL kullanarak nesneyi indirmek veya önizlemek istiyorsa asıla oss:GetObject iznini vermeniz gerekir.
Aşağıdaki örnek kod kullanılarak oluşturulan ön imzalı URL artı işareti (
+) içerebilir. Bu durumda URL'deki artı işaretini (+)%2Bile değiştirin. Aksi takdirde ön imzalı URL nesneye beklenen şekilde erişmek için kullanılamayabilir.
Aşağıdaki örnekler, geçici yetkilendirme için ön imzalı URL'lerin nasıl kullanılacağını gösterir.