Para enviar solicitações ao OSS com o Android SDK, configure as credenciais de acesso. Escolha os provedores de credenciais adequados aos seus requisitos de autenticação e autorização.
Pré-requisitos
O OSS Android SDK está instalado. Instalar o Android SDK.
Inicializar o provedor de credenciais
Escolher um provedor de credenciais
O OSS oferece vários métodos para inicializar provedores de credenciais. Escolha a opção adequada ao seu cenário.
Dispositivos móveis são ambientes não confiáveis. Credenciais de acesso total — pares de AccessKey de longo prazo ou tokens STS temporários — que chegam ao cliente podem ser extraídas por engenharia reversa ou depuração em tempo de execução. Para reduzir o risco de vazamento de dados, estruture o caminho de acesso entre o aplicativo móvel e o OSS da seguinte forma:
Mantenha os pares de AccessKey de longo prazo no servidor de aplicativos. Nunca os envie ao cliente móvel.
Configure o aplicativo móvel para obter uma credencial temporária do STS ou uma URL pré-assinada do servidor de aplicativos antes de chamar o OSS.
Ao usar credenciais temporárias do STS, aplique uma política do RAM que restrinja as permissões ao prefixo de caminho de objeto de um único usuário e defina um período curto de validade.
Para uploads e downloads de dados sensíveis, como documentos de identidade, imagens faciais, credenciais de pagamento ou registros médicos, faça o servidor de aplicativos gerar uma URL pré-assinada para uso pelo aplicativo móvel. O aplicativo móvel nunca deve armazenar credenciais. Para obter detalhes sobre URLs pré-assinadas, consulte Autorizar acesso (Android SDK).
|
Método de inicialização do provedor de credenciais |
Cenário |
Requer par de AccessKey ou token STS pré-configurado |
Tipo de credencial subjacente |
Validade da credencial |
Método de rotação ou atualização da credencial |
|
Ambientes seguros e estáveis, não vulneráveis a ataques externos, que exigem acesso de longo prazo sem rotação frequente de credenciais. |
Sim |
AccessKey |
Longo prazo |
Rotação manual |
|
|
Ambientes não confiáveis que exigem controle de validade e permissões das credenciais. |
Sim |
Token STS |
Temporário |
Personalizado |
|
|
Aplicativos que obtêm credenciais de um sistema externo. |
Não |
Token STS |
Temporário |
Atualização automática |
Método 1: Usar um par de AccessKey
Use o par de AccessKey (AccessKey ID e AccessKey secret) de uma conta Alibaba Cloud ou de um usuário do RAM para inicializar o provedor de credenciais. Este método é adequado para ambientes seguros e estáveis que exigem acesso de longo prazo ao OSS sem rotação frequente de credenciais. A manutenção manual de chaves apresenta riscos de segurança e aumenta a complexidade operacional. Para obter um par de AccessKey, chame CreateAccessKey - Criar um par de AccessKey para uma conta Alibaba Cloud ou usuário RAM.
Este método não é recomendado para clientes móveis. Uma conta Alibaba Cloud possui permissões totais sobre todos os recursos. Se o par de AccessKey dessa conta vazar, o sistema enfrentará altos riscos de segurança. Caso seja indispensável usar este método, utilize o par de AccessKey de um usuário do RAM com as permissões mínimas necessárias.
Código de exemplo
String ak = "<ALIBABA_CLOUD_ACCESS_KEY_ID>";
String sk = "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>";
OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(ak, sk);
Método 2: Usar um token STS
Use credenciais temporárias do STS para inicializar o provedor de credenciais. Esta abordagem é ideal para aplicativos que necessitam de acesso temporário ao OSS com controle de permissões granular e em tempo real. As credenciais incluem um AccessKey ID, um AccessKey secret e um token STS. A manutenção manual de tokens gera riscos de segurança e eleva a complexidade operacional. Para obter um token STS, chame AssumeRole - Obter credenciais de identidade temporárias para uma função RAM.
Os exemplos a seguir mostram como atualizar o token STS manual ou automaticamente.
Atualizar manualmente o token STS
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);
Atualizar automaticamente o token STS
OSSCredentialProvider 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;
}
};
Método 3: Usar CredentialsURI
Use CredentialsURI para inicializar o provedor de credenciais quando o aplicativo precisar obter credenciais de um sistema externo, permitindo gerenciamento flexível e acesso sem chaves. A implementação subjacente usa um token STS. A ferramenta Credentials utiliza a URI fornecida para recuperar esse token e inicializar o cliente, eliminando a necessidade de fornecer diretamente um par de AccessKey ou um token STS.
-
A URI deve retornar uma resposta em conformidade com o seguinte protocolo:
Código de status da resposta: 200
-
Estrutura do corpo da resposta:
{ "StatusCode":200, "AccessKeyId":"AccessKeyId", "AccessKeySecret":"AccessKeySecret", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"SecurityToken" }
-
Configure a credencial da URI como credencial de acesso.
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; * } * }); */