Cria um par de nome de usuário e senha estáticos. Para acessar um broker do ApsaraMQ for RabbitMQ com um cliente RabbitMQ open source, use um par de nome de usuário e senha para autenticação. O acesso ao broker do ApsaraMQ for RabbitMQ só é permitido após a autenticação bem-sucedida. O ApsaraMQ for RabbitMQ permite gerar nomes de usuário e senhas usando pares de AccessKey fornecidos pelo Alibaba Cloud Resource Access Management (RAM).
Informações básicas
Para acessar um broker do ApsaraMQ for RabbitMQ com um cliente RabbitMQ open source, use um par de nome de usuário e senha para autenticação. O acesso ao broker do ApsaraMQ for RabbitMQ ocorre somente após a autenticação bem-sucedida.
O ApsaraMQ for RabbitMQ permite gerar nomes de usuário e senhas usando pares de AccessKey fornecidos pelo Alibaba Cloud RAM.
Observações de uso
A instância do ApsaraMQ for RabbitMQ na qual você deseja criar o par de nome de usuário e senha estáticos deve estar no estado Running.
Use um par de AccessKey para criar apenas um par de nome de usuário e senha estáticos por instância do ApsaraMQ for RabbitMQ.
Para atualizar um par existente de nome de usuário e senha estáticos, exclua o par atual e crie um novo.
Código de exemplo para gerar um nome de usuário
O valor do parâmetro userName na requisição é uma string codificada em Base64, gerada com base no ID da instância e no AccessKey ID. O código a seguir demonstra como gerar esse nome de usuário:
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Utils {
public static final Charset UTF8 = StandardCharsets.UTF_8;
/**
* Decode the Base64 string.
* @param str
* @return
*/
public static String decode(String str) {
return new String(Base64.getDecoder().decode(str.getBytes(UTF8)), UTF8);
}
public static String encode(String bytes) {
return new String(Base64.getEncoder().encode(bytes.getBytes(UTF8)), UTF8);
}
public static void main(String[] args) {
// Use the ID of your ApsaraMQ for RabbitMQ instance and the AccessKey pair of the Alibaba Cloud account that you use to purchase the instance to form a string.
String str = "2:${instanceId}:${ak}";
// Generate the value of the userName parameter in the API operation.
String userName = encode(str);
System.out.println("userName=" + userName);
String decodeStr = decode(userName);
System.out.println("originStr=" + decodeStr);
}
}
Código de exemplo para gerar uma assinatura
O sistema usa um algoritmo de criptografia para gerar os valores dos parâmetros signature e secretSign na requisição com base no timestamp de criação do nome de usuário estático especificado e no AccessKey secret. O código a seguir demonstra como gerar os valores de signature e secretSign:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class SignatureUtils {
public static String hamcsha1(byte[] data, byte[] key) throws NoSuchAlgorithmException, InvalidKeyException {
SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
return byte2hex(mac.doFinal(data));
}
public static String byte2hex(byte[] b) {
StringBuilder hs = new StringBuilder();
String stmp;
for (int n = 0; b != null && n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1) {
hs.append('0');
}
hs.append(stmp);
}
return hs.toString().toUpperCase();
}
public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException {
// The value of the createTimestamp parameter in the sample code is the value of the createTimestamp parameter in the API operation.
String createTimestamp= String.valueOf(System.currentTimeMillis());
System.out.println("createTimestamp:" + createTimestamp);
// The AccessKey secret of your Alibaba Cloud account.
String sk = "${sk}";
// Generate the value of the SecretSign parameter in the API operation.
String SecretSign = hamcsha1(sk.getBytes(), createTimestamp.getBytes());
System.out.println("SecretSign:" + SecretSign);
// Generate the value of the signature parameter in the operation.
String signature = hamcsha1(createTimestamp.getBytes(), sk.getBytes());
System.out.println("signature:" + signature);
}
}
Parâmetros da requisição
Parâmetro | Tipo | Obrigatório | Exemplo | Descrição |
Action | String | Sim | CreateAccount | Operação a ser executada. Defina o valor como CreateAccount. |
instanceId | String | Sim | amqp-cn-***** | ID da instância na qual você deseja criar o par de nome de usuário e senha estáticos. |
accountAccessKey | String | Sim | LTAI5t8be***tEJ6vfo | AccessKey ID da sua conta Alibaba Cloud ou usuário RAM. Para obter um AccessKey ID, consulte Criar um par de AccessKey. Nota Se você usar um par de nome de usuário e senha estáticos criado com o par de AccessKey de um usuário RAM para enviar e receber mensagens no ApsaraMQ for RabbitMQ, verifique se as permissões necessárias foram concedidas ao usuário RAM. Para mais informações, consulte Políticas do RAM. |
userName | String | Sim | LTAI5*eRZtEJ6vfo | Nome de usuário estático a ser criado. O valor deste parâmetro é uma string codificada em Base64, gerada com base no ID da instância e no AccessKey ID. Para mais informações, consulte a seção "Código de exemplo para gerar um nome de usuário" deste tópico. |
signature | String | Sim | 22c2d7d1769cb53c5a6d9213248e2de524 | Assinatura. O sistema gera uma senha estática com base na assinatura da requisição, na assinatura do AccessKey secret e no nome de usuário. O sistema usa o algoritmo HMAC-SHA1 para gerar a assinatura com base no timestamp de criação do nome de usuário e no AccessKey ID. Para mais informações, consulte a seção "Código de exemplo para gerar uma assinatura" deste tópico. |
createTimestamp | Long | Sim | 1671175303522 | Timestamp que indica quando a senha foi criada. Unidade: milissegundos. Nota Este timestamp é especificado por você e usado para gerar a senha estática. Não corresponde ao timestamp em que o sistema gera a senha. |
secretSign | String | Sim | 4c1a6367ce4c4255e9617326f9133ac635 | Assinatura do AccessKey secret. O sistema gera uma senha estática com base na assinatura da requisição, na assinatura do AccessKey secret e no nome de usuário. O sistema usa o algoritmo HMAC-SHA1 para gerar a assinatura do AccessKey secret com base no timestamp de criação do nome de usuário e no AccessKey ID. Para mais informações, consulte a seção "Código de exemplo para gerar uma assinatura" deste tópico. |
Parâmetros de resposta
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
RequestId |
String |
FEBA5E0C-50D0-4FA6-A794-4901E5465*** |
ID da requisição. |
|
Code |
Integer |
200 |
Código de status HTTP retornado. O valor 200 indica que a requisição foi bem-sucedida. |
|
Message |
String |
operation success |
Mensagem retornada. |
|
Success |
Boolean |
true |
Indica se a requisição foi bem-sucedida. |
|
Data |
Object |
Dados retornados. |
|
|
AccessKey |
String |
LTAI5*eRZtEJ6vfo |
AccessKey ID usado para criar a senha. |
|
Password |
String |
OUYwQzM2QjZBRkUxNDRFM*MzZCNzdDQzoxNjcxNDMwMzkyODI1 |
Senha estática criada. |
|
CreateTimeStamp |
Long |
1671175303522 |
Timestamp que indica quando a senha foi criada. Unidade: milissegundos. |
|
InstanceId |
String |
amqp-cn-***** |
ID da instância do ApsaraMQ for RabbitMQ. |
|
MasterUId |
Long |
1565***973901 |
ID da conta Alibaba Cloud ou usuário RAM ao qual pertence o par de AccessKey usado para criar o par de nome de usuário e senha estáticos. |
|
UserName |
String |
MjphbXFwLWNuLXVxbTJ6cjc2djAwMzpMVEFJNX***ZNMWVSWnRFSjZ2Zm8= |
Nome de usuário estático criado. |
Exemplos
Requisições de exemplo
http(s)://[Endpoint]/?Action=CreateAccount
&instanceId=amqp-cn-*********
&accountAccessKey=LTAI5t8be*******tEJ6vfo
&userName=LTAI5***********eRZtEJ6vfo
&signature=22c2d7d1769cb53c5a6d9213248e2de524******
&createTimestamp=1671175303522
&secretSign=4c1a6367ce4c4255e9617326f9133ac635******
&<Common request parameters>
Respostas de sucesso de exemplo
Formato XML
HTTP/1.1 200 OK
Content-Type:application/xml
<CreateAccountResponse>
<RequestId>FEBA5E0C-50D0-4FA6-A794-4901E5465***</RequestId>
<Code>200</Code>
<Message>operation success</Message>
<Success>true</Success>
<Data>
<AccessKey>LTAI5***********eRZtEJ6vfo</AccessKey>
<Password>OUYwQzM2QjZBRkUxNDRFM***************MzZCNzdDQzoxNjcxNDMwMzkyODI1</Password>
<CreateTimeStamp>1671175303522</CreateTimeStamp>
<InstanceId>amqp-cn-*********</InstanceId>
<UserName>MjphbXFwLWNuLXVxbTJ6cjc2djAwMzpMVEFJNX*******ZNMWVSWnRFSjZ2Zm8=</UserName>
</Data>
</CreateAccountResponse>
Formato JSON
HTTP/1.1 200 OK
Content-Type:application/json
{
"RequestId" : "FEBA5E0C-50D0-4FA6-A794-4901E5465***",
"Code" : 200,
"Message" : "operation success",
"Success" : true,
"Data" : {
"AccessKey" : "LTAI5***********eRZtEJ6vfo",
"Password" : "OUYwQzM2QjZBRkUxNDRFM***************MzZCNzdDQzoxNjcxNDMwMzkyODI1",
"CreateTimeStamp" : 1671175303522,
"InstanceId" : "amqp-cn-*********",
"UserName" : "MjphbXFwLWNuLXVxbTJ6cjc2djAwMzpMVEFJNX*******ZNMWVSWnRFSjZ2Zm8="
}
}
Códigos de erro
Para obter uma lista de códigos de erro, consulte Códigos de erro do serviço.
Criar um par de nome de usuário e senha estáticos no console
Você também pode criar um par de nome de usuário e senha estáticos no console do ApsaraMQ for RabbitMQ. Para mais informações, consulte Gerenciar nomes de usuário e senhas estáticos.