Obtenção de um token de agência
Função
Esta API é usada para obter um token de agência.
Por exemplo, depois que uma relação de confiança é estabelecida entre A e B, A é a parte delegante e B é a parte delegada. Em seguida, B pode usar essa API para obter um token de agência. O token de agência obtido só pode ser usado para gerenciar os recursos que a conta B é delegada para gerenciar. Se a conta B precisa gerenciar seus próprios recursos, a conta B precisa obter um token de usuário. Para obter detalhes, consulte Delegação de acesso a recursos para outra conta.
Um token é uma credencial de acesso emitida para um usuário para suportar sua identidade e permissões. Ao chamar as APIs do IAM ou de outros serviços de nuvem, você pode usar essa API para obter um token para autenticação.
A API pode ser chamada usando o ponto de extremidade global e pontos de extremidade da região específica. Para pontos de extremidade do IAM, consulte Regiões e pontos de extremidade.
- O período de validade de um token é de 24 horas. Armazene em cache o token para evitar chamadas frequentes de API.
- Certifique-se de que o token seja válido enquanto você o estiver usando. Usar um token que expirará em breve pode causar falhas de chamada de API.
URI
POST /v3/auth/tokens
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
nocatalog |
Não |
String |
Se este parâmetro for definido, nenhuma informação de catálogo será exibida na resposta. Qualquer cadeia de caracteres definida para esse parâmetro indica que nenhuma informação de catálogo será exibida. |
Parâmetros de solicitação
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
Content-Type |
Sim |
String |
Preencha application/json;charset=utf8 nesse campo. |
X-Auth-Token |
Sim |
String |
Token com permissões de Agent Operator de um usuário do IAM criado pela parte delegada B. |
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
Sim |
Object |
Informações de autenticação. |
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
Sim |
Object |
Parâmetros de autenticação. |
|
Sim |
Object |
Escopo de uso do token. O valor pode ser project ou domain.
NOTA:
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
methods |
Sim |
Array of strings |
Método para obter o token. Defina esse parâmetro como assume_role. |
Sim |
Object |
Detalhes sobre a conta e a agência delegante. |
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
domain_id |
Não |
String |
ID da conta da parte delegante A. domain_id ou domain_name deve ser definido. É aconselhável especificar domain_id. Para obter detalhes sobre como obter o ID da conta, consulte Obtenção de informações sobre conta, usuário do IAM, grupo, projeto, região e agência. |
domain_name |
Não |
String |
Nome da conta da parte delegante A. domain_id ou domain_name deve ser definido. É aconselhável especificar domain_id. Você pode exibir o nome da conta da parte delegante A na lista de agências no console do IAM. |
agency_name |
Sim |
String |
Nome da agência criada pela parte delegante A. Para obter detalhes sobre como obter o nome da agência, consulte Obtenção de informações sobre conta, usuário do IAM, grupo, projeto, região e agência. |
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
Não |
Object |
Se esse campo estiver definido como domain, o token poderá ser usado para acessar serviços globais, como o OBS. Os serviços globais não estão sujeitos a nenhum projeto ou região. Para obter detalhes sobre o escopo do serviço, consulte Permissões do sistema. Você pode especificar id ou name. domain_id é recomendado. |
|
Não |
Object |
Se esse campo estiver definido como project, o token poderá ser usado para acessar apenas serviços em projetos específicos, como o ECS. Para obter detalhes sobre o escopo do serviço, consulte Permissões do sistema. Você pode especificar id ou name. |
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
id |
Não |
String |
ID da conta da parte delegante A. Para obter detalhes sobre como obter o ID da conta, consulte Obtenção de informações sobre conta, usuário do IAM, grupo, projeto, região e agência. Você pode especificar id ou name. |
name |
Não |
String |
Nome da conta da parte delegante A. Para obter detalhes sobre como obter o ID da conta, consulte Obtenção de informações sobre conta, usuário do IAM, grupo, projeto, região e agência. Você pode especificar id ou name. |
Parâmetro |
Obrigatório |
Tipo |
Descrição |
---|---|---|---|
id |
Não |
String |
ID do projeto da parte delegante A. Para obter detalhes sobre como obter o ID do projeto, consulte Obtenção de informações sobre conta, usuário do IAM, grupo, projeto, região e agência. Você pode especificar id ou name. |
name |
Não |
String |
Nome do projeto da parte delegante A. Para obter detalhes sobre como obter o nome do projeto, consulte Obtenção de informações sobre conta, usuário do IAM, grupo, projeto, região e agência. Você pode especificar id ou name. |
Exemplo de solicitação
- Solicitação para usar um token de usuário com permissões de Agent Operator do usuário do IAM IAMUserB da parte delegada B (nome da conta: IAMDomainB) para obter outro token para gerenciar os recursos da parte delegante A (nome da conta: IAMDomainA) no projeto ap-southeast-1 por meio da agência IAMAgency, sem exibir informações de catálogo na resposta
POST https://iam.myhuaweicloud.com/v3/auth/tokens?nocatalog=true
{ "auth": { "identity": { "methods": [ "assume_role" ], "assume_role": { "domain_name": "IAMDomainA", // Name of the account to which the delegating party IAM user A belongs "agency_name": "IAMAgency" // Name of the agency created by IAM user A } }, "scope": { "project": { "name": "ap-southeast-1" //Project name } } } }
- Solicitação para usar um token de usuário com permissões de Agent Operator do usuário do IAM IAMUserB da parte delegada B (nome da conta: IAMDomainB) para obter outro token para gerenciar todos os recursos da parte delegante A (nome da conta: IAMDomainA) por meio da agência IAMAgency
POST https://iam.myhuaweicloud.com/v3/auth/tokens
{ "auth": { "identity": { "methods": [ "assume_role" ], "assume_role": { "domain_name": "IAMDomainA", // Name of the account to which the delegating party IAM user A belongs "agency_name": "IAMAgency" // Name of the agency created by IAM user A } }, "scope": { "domain": { "name": "IAMDomainA" // Name of the account to which the delegating party IAM user A belongs } } } }
Parâmetros de resposta
Parâmetro |
Tipo |
Descrição |
---|---|---|
X-Subject-Token |
String |
Token assinado. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
Object |
Informações do token. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
methods |
Array of strings |
Método para obter o token. |
expires_at |
String |
Hora em que o token expirará.
NOTA:
O valor é uma hora UTC no formato AAAA-MM-DDTHH:mm:ss.ssssssZ, por exemplo, 2023-06-28T08:56:33.710000Z. Para obter detalhes sobre os formatos de data e carimbo de data/hora, consulte ISO-8601. |
issued_at |
String |
Hora em que o token foi emitido.
NOTA:
O valor é uma hora UTC no formato AAAA-MM-DDTHH:mm:ss.ssssssZ, por exemplo, 2023-06-28T08:56:33.710000Z. Para obter detalhes sobre os formatos de data e carimbo de data/hora, consulte ISO-8601. |
Object |
Informações sobre a parte delegada B. |
|
Array of objects |
Informações do catálogo. |
|
Object |
Informações da conta da parte delegante A. Esse parâmetro é retornado somente quando o parâmetro scope no corpo da solicitação foi definido como domain. |
|
Object |
Informações do projeto da parte delegante A. Este parâmetro é retornado somente quando o parâmetro scope no corpo da solicitação foi definido como project. |
|
Array of objects |
Informações de permissões do token. |
|
Object |
Informações sobre a agência criada pela parte delegante A. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
Object |
Informações sobre um usuário do IAM da parte delegada B. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
name |
String |
Nome de usuário do IAM. |
id |
String |
ID do usuário do IAM. |
Object |
Informações da conta da parte delegada B. |
|
password_expires_at |
String |
Tempo de expiração da senha do usuário do IAM. Se este parâmetro não for especificado, a senha nunca expirará.
NOTA:
O valor é uma hora UTC no formato AAAA-MM-DDTHH:mm:ss.ssssssZ, por exemplo, 2023-06-28T08:56:33.710000Z. Para obter detalhes sobre os formatos de data e carimbo de data/hora, consulte ISO-8601. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
name |
String |
Nome da conta da parte delegada B. |
id |
String |
ID da conta da parte delegada B. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
Array of objects |
Informações do ponto de extremidade. |
|
id |
String |
ID do serviço. |
name |
String |
Nome do serviço. |
type |
String |
Tipo do serviço ao qual a API pertence. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
id |
String |
ID do ponto de extremidade. |
interface |
String |
Visibilidade da API. public indica que a API está disponível para acesso público. |
region |
String |
Região à qual o ponto de extremidade pertence. |
region_id |
String |
ID da região. |
url |
String |
URL do ponto de extremidade. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
name |
String |
Nome da conta da parte delegante A. |
id |
String |
ID da conta da parte delegante A. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
name |
String |
Nome do projeto da parte delegante A. |
id |
String |
ID do projeto da parte delegante A. |
Object |
Informações da conta da parte delegante A. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
name |
String |
Nome da conta da parte delegante A. |
id |
String |
ID da conta da parte delegante A. |
Parâmetro |
Tipo |
Descrição |
---|---|---|
name |
String |
Nome de permissão. |
id |
String |
ID de permissão. O valor padrão é 0, que não corresponde a nenhuma permissão. |
Exemplo de resposta
Código de status: 201
A solicitação foi bem-sucedida.
Exemplo 1: resposta à solicitação de uso de um token de usuário com permissões de Agent Operator do usuário do IAM IAMUserB da parte delegada B (nome da conta: IAMDomainB) para obter outro token para gerenciar todos os recursos da parte delegante A (nome da conta: IAMDomainA) por meio da agência IAMAgency
Exemplo 2: resposta à solicitação de uso de um token de usuário com permissões de Agent Operator do usuário do IAM IAMUserB da parte delegada B (nome da conta: IAMDomainB) para obter outro token para gerenciar os recursos da parte delegante A (nome da conta: IAMDomainA) no projeto ap-southeast-1 por meio da agência IAMAgency, sem exibir informações de catálogo na resposta
- Exemplo 1
Parameters in the response header X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
Parameters in the response body { "token": { "expires_at": "2020-01-05T05:05:17.429000Z", "methods": [ "assume_role" ], "catalog": [ { "endpoints": [ { "id": "33e1cbdd86d34e89a63cf8ad16a5f49f", "interface": "public", "region": "*", "region_id": "*", "url": "https://iam.myhuaweicloud.com/v3.0" } ], "id": "100a6a3477f1495286579b819d399e36", "name": "iam", "type": "iam" } ], "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "roles": [ { "id": "0", "name": "op_gated_eip_ipv6" }, { "id": "0", "name": "op_gated_rds_mcs" } ], "issued_at": "2020-01-04T05:05:17.429000Z", "user": { "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "id": "0760a9e2a60026664f1fc0031f9f205e", "name": "IAMDomainA/IAMAgency" }, "assumed_by": { "user": { "domain": { "id": "a2cd82a33fb043dc9304bf72a0f38f00", "name": "IAMDomainB" }, "id": "0760a0bdee8026601f44c006524b17a9", "name": "IAMUserB", "password_expires_at": "" } } } }
- Exemplo 2
Parameters in the response header X-Subject-Token:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB...
Parameters in the response body { "token": { "expires_at": "2020-01-05T06:49:28.094000Z", "methods": [ "assume_role" ], "catalog": [], "roles": [ { "id": "0", "name": "op_gated_eip_ipv6" }, { "id": "0", "name": "op_gated_rds_mcs" } ], "project": { "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "id": "aa2d97d7e62c4b7da3ffdfc11551f878", "name": "ap-southeast-1" }, "issued_at": "2020-01-04T06:49:28.094000Z", "user": { "domain": { "id": "d78cbac186b744899480f25bd022f468", "name": "IAMDomainA" }, "id": "0760a9e2a60026664f1fc0031f9f205e", "name": "IAMDomainA/IAMAgency" }, "assumed_by": { "user": { "domain": { "id": "a2cd82a33fb043dc9304bf72a0f38f00", "name": "IAMDomainB" }, "id": "0760a0bdee8026601f44c006524b17a9", "name": "IAMUserB", "password_expires_at": "" } } } }
Código de status: 400
Parâmetros inválidos.
{ "error": { "code": 400, "message": "The request body is invalid", "title": "Bad Request" } }
Código de status: 401
Falha na autenticação.
{ "error": { "code": 401, "message": "The X-Auth-Token is invalid!", "title": "Unauthorized" } }
Código de status: 403
Acesso negado.
- O token de usuário especificado em X-Auth-Token para o usuário B da parte delegada B não tem a permissão de Agent Operator. Por favor, solicite a permissão necessária.
{ "error": { "code": 403, "message": "You have no right to do this action", "title": "Forbidden" } }
Códigos de status
Código de status |
Descrição |
---|---|
201 |
A solicitação foi bem-sucedida. |
400 |
Parâmetros inválidos. |
401 |
Falha na autenticação. |
403 |
Acesso negado. (A possível causa desse erro é que a parte delegada não tem a permissão de Agent Operator.) |
404 |
O recurso solicitado não pode ser encontrado. |
500 |
Erro de servidor interno. |
503 |
Serviço indisponível. |
Códigos de erro
Nenhum