云服务器内容精选

  • 响应参数 表5 响应Header参数 参数 参数类型 描述 X-Subject-LoginToken String 签名后的logintoken。 表6 响应Body参数 参数 参数类型 描述 logintoken Object 自定义身份代理登录票据信息。 表7 logintoken 参数 参数类型 描述 domain_id String 账号ID。 expires_at String logintoken的过期时间。 method String 认证方法。当认证用户为华为云用户时,该字段内容为“token”,当认证用户为自定义身份代理用户时,该字段内容为“federation_proxy”。 user_id String 用户ID。 user_name String 用户名。 session_id String 会话ID。 session_user_id String 自定义身份代理用户ID。 session_name String 自定义身份代理用户名。 说明: 通过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数时,会返回该字段。该字段的值即为session_user.name所填写的值。 assumed_by Object 被委托方用户信息。 说明: 通过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数时,会返回该字段。 表8 logintoken.assumed_by 参数 参数类型 描述 user Object 被委托方用户信息。 表9 logintoken.assumed_by.user 参数 参数类型 描述 domain Object 被委托方用户所属账号信息。 name String 被委托方用户名。 password_expires_at String 被委托方用户的密码过期时间。 说明: UTC时间,格式为 YYYY-MM-DDTHH:mm:ss.ssssssZ,日期和时间戳格式参照 ISO-8601,如:2023-06-28T08:56:33.710000Z。 id String 被委托方用户ID。 表10 logintoken.assumed_by.user.domain 参数 参数类型 描述 name String 被委托方用户所属账号名称。 id String 被委托方用户所属账号ID。
  • 请求示例 获取自定义身份代理登录票据。 POST https://iam.myhuaweicloud.com/v3.0/OS-AUTH/securitytoken/logintokens { "auth": { "securitytoken": { "access": "LUJHNN4WB569PGAP...", "secret": "7qtrm2cku0XubixiVkBOcvMfpnu7H2mLN...", "id": "gQpjbi1ub3J0a...", "duration_seconds":"600" } } }
  • 响应示例 状态码为 201 时: 创建成功。 示例1:通过token获取临时访问密钥和securitytoken。 示例2:通过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数。 示例 1 响应Header参数: X-Subject-LoginToken:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB... 响应Body参数: { "logintoken": { "domain_id": "05262121fb00d5c30fbec013bc1...", "expires_at": "2020-01-20T08:18:36.447000Z", "method": "token", "user_id": "0526213b8a80d38a1f31c013ed...", "user_name": "IAMUser", "session_user_id": "093f75808b8089ba1f6dc000c7cac...", "session_id": "40b328b6683a41b9bf8e7185e..." } } 示例 2 响应Header参数: X-Subject-LoginToken:MIIatAYJKoZIhvcNAQcCoIIapTCCGqECAQExDTALB... 响应Body参数: { "logintoken": { "domain_id": "05262121fb00d5c30fbec01...", "expires_at": "2020-01-23T03:27:26.728000Z", "method": "federation_proxy", "user_id": "07826f367b80d2474ff9c013a...", "user_name": "IAMDomainA/IAMAgency", "session_id": "0012c8e6adda4ce787e90585d...", "session_user_id": "093f75808b8089ba1f6dc000c7cac...", "session_name": "SessionUserName", "assumed_by": { "user": { "domain": { "name": "IAMDomainB", "id": "0659ef9c9c80d4560f14c009ac..." }, "name": "IAMUserB", "password_expires_at": "2020-02-16T02:44:57.000000Z", "id": "0659ef9d4d00d3b81f26c009fe..." } } } }
  • 请求参数 表1 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 表2 请求Body参数 参数 是否必选 参数类型 描述 auth 是 Object 认证信息。 表3 auth 参数 是否必选 参数类型 描述 securitytoken 是 Object 认证参数。 表4 auth.securitytoken 参数 是否必选 参数类型 描述 access 是 String AK。 secret 是 String SK。 id 是 String 即临时安全凭证securitytoken。 支持使用自定义身份代理用户或普通用户获取的securitytoken换取logintoken,详情请参见:通过token获取临时访问密钥和securitytoken。 支持委托的方式,但获取securitytoken时,请求体中必须填写session_user.name参数,详情请参见:通过委托获取临时访问密钥和securitytoken。 duration_seconds 否 Integer 自定义身份代理登录票据logintoken的有效时间,时间单位为秒。默认10分钟,即600秒,取值范围10分钟~12小时。 说明: 如果传入的值不在取值范围(10分钟~12小时)内,则取默认值10分钟。 logintoken有效时间为临时安全凭证securitytoken剩余有效时间与duration_seconds传参的最小值。 为避免duration_seconds传参无效,建议设置临时安全凭证securitytoken具有较长的有效期(15分钟~24小时),且duration_seconds传参小于临时安全凭证securitytoken剩余有效时间。 当临时安全凭证securitytoken剩余有效时间小于10分钟时,logintoken的有效时间将取默认值10分钟。
  • 功能介绍 该接口用于获取自定义身份代理登录票据logintoken。logintoken是系统颁发给自定义身份代理用户的登录票据,承载用户的身份、session等信息。调用自定义身份代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。 该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见:地区和终端节点。 自定义身份代理登录票据logintoken默认有效期为10分钟,可设置范围为10分钟~12小时。
  • 操作步骤 在DomainA中创建IAM用户(用户名以UserB为例),并加入GroupC用户组中,具体方法请参见:用户组添加用户。 请确认该IAM用户支持编程访问华为云服务。如需修改IAM用户访问方式,请参考:查看或修改IAM用户信息。 将UserB的访问密钥或用户名和密码(推荐使用访问密钥)配置到企业IdP的配置文件中,以便获取用户认证token和调用API。为了保障您的账号安全,密码和访问密钥建议加密存储。 在IAM控制台左侧导航栏选择“委托”,单击右上方的“ 创建委托”。 在创建委托页面,设置委托参数。 “委托名称”以“testagency”为例,“委托类型”必须选择“普通账号”,“委托的账号”填写“DomainA”,“持续时间”根据具体情况选择,并单击“下一步”。 图1 创建委托 选择权限的作用范围,勾选需要授予委托的权限,给委托授权。 在企业IdP创建用户组“testagency”(与4中的委托名称相同),将企业本地用户按需加入本地用户组,授予其自定义代理登录华为云时所需权限,具体方法请参见企业IdP帮助文档。 企业本地用户登录企业管理系统后,访问企业IdP的自定义代理,从委托列表(由安全管理员来查询租户的委托列表,根用户默认为安全管理员)中选择所需要使用的委托,具体方法请参见企业管理系统帮助文档。 自定义代理的委托列表是企业IdP创建的用户组名称与华为云创建的委托名称的交集。 企业IdP自定义代理根据委托,携带IAM用户userB的token调用API(POST /v3.0/OS-CREDENTIAL/securitytokens),获取具有临时身份的securityToken,调用方法请参见:通过委托获取临时AK/SK和securitytoken。 通过委托获取securitytoken时,请求体中必须填写session_user.name参数。 企业IdP自定义代理携带获取到的临时AK/SK和securitytoken通过全局域名(iam.myhuaweicloud.com)调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken。登录票据位于Response Header中的X-Subject-LoginToken。获取方式请参见:获取自定义代理登录票据。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken时,需要使用全局域名:iam.myhuaweicloud.com。 logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息,默认有效期为10分钟。调用FederationProxyUrl登录云服务控制台时,需要使用logintoken进行认证。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)时可以设置logintoken的有效时间,有效时间设置范围为10分钟~12小时。如果传入的值大于临时安全凭证securitytoken剩余的过期时间,则使用临时安全凭证securitytoken剩余的过期时间。 企业IdP自定义代理根据规范创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。FederationProxyUrl如下: https://auth.huaweicloud.com/authui/federation/login?idp_login_url={enterprise_system_loginURL}&service={console_service_region_url}&logintoken={logintoken} 示例: https://auth.huaweicloud.com/authui/federation/login?idp_login_url=https%3A%2F%2Fexample.com&service=https%3a%2f%2fconsole.huaweicloud.com%2fapm%2f%3fregion%3dcn-north-4%23%2fapm%2fatps%2ftopology&logintoken=****** 表1 参数说明 参数 说明 idp_login_url 企业管理系统登录地址。 service 需要访问的华为云服务地址。 logintoken 自定义代理登录票据。 为了浏览器正常识别参数内容,需要将以上三个参数都进行UrlEncode编码。 您可以参考以下Demo示例创建云服务登录地址FederationProxyUrl:使用委托方式创建云服务登录地址 该FederationProxyUrl包含从IAM获得的登录票据,票据用于对访问的用户进行身份验证。FederationProxyUrl需要经过UrlEncode编码。 华为云认证登录票据loginToken成功后,浏览器自动重定向到需要访问的华为云服务地址,即云服务代理登录地址中service设定的地址,企业用户成功访问华为云的控制台。 loginToken认证失败,则重定向到idp_login_url设定的地址。
  • Java示例代码 以下示例说明了如何使用java编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云 Java 软件开发工具包(Java SDK)开发。 import java.net.URLEncoder; import java.util.Collections; import com.huaweicloud.sdk.core.auth.GlobalCredentials; import com.huaweicloud.sdk.core.http.HttpConfig; import com.huaweicloud.sdk.core.exception.*; import com.huaweicloud.sdk.iam.v3.IamClient; import com.huaweicloud.sdk.iam.v3.model.*; //使用全局域名获取自定义代理登录票据 String endpoint = "https://iam.myhuaweicloud.com"; //配置客户端属性 HttpConfig config = HttpConfig.getDefaultHttpConfig() .withIgnoreSSLVerification(true) .withProxyHost("proxy.huawei.com") .withProxyPort(8080); // 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节 IamClient iamClient = IamClient.newBuilder().withCredential(new GlobalCredentials() .withDomainId(domainId) .withAk(ak) .withSk(sk)) .withEndpoint(endpoint) .withHttpConfig(config) .build(); /*CreateTemporaryAccessKeyByToken 调用通过token获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securitytoken。 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。 */ TokenAuthIdentity tokenAuthIdentity = new TokenAuthIdentity().withMethods(Collections.singletonList(TokenAuthIdentity.MethodsEnum.fromValue("token"))).withToken(new IdentityToken().withDurationSeconds(3600)); CreateTemporaryAccessKeyByTokenRequestBody createTemporaryAccessKeyByTokenRequestBody = new CreateTemporaryAccessKeyByTokenRequestBody().withAuth(new TokenAuth().withIdentity(tokenAuthIdentity)); CreateTemporaryAccessKeyByTokenResponse createTemporaryAccessKeyByTokenResponse = iamClient.createTemporaryAccessKeyByToken(new CreateTemporaryAccessKeyByTokenRequest().withBody(createTemporaryAccessKeyByTokenRequestBody)); Credential credential = createTemporaryAccessKeyByTokenResponse.getCredential(); /*CreateLoginToken 获取自定义代理登录票据logintoken。 logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。 调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。 */ CreateLoginTokenRequestBody createLoginTokenRequestBody = new CreateLoginTokenRequestBody(). withAuth(new LoginTokenAuth().withSecuritytoken(new LoginTokenSecurityToken(). withAccess(credential.getAccess()). withId(credential.getSecuritytoken()). withSecret(credential.getSecret()).withDurationSeconds(1800))); CreateLoginTokenResponse createLoginTokenResponse = iamClient.createLoginToken(new CreateLoginTokenRequest().withBody(createLoginTokenRequestBody)); String loginToken = createLoginTokenResponse.getXSubjectLoginToken(); //获取自定义代理登录票据URL String authURL = "https://auth.huaweicloud.com/authui/federation/login"; //企业管理系统登录地址 String enterpriseSystemLoginURL = "https://example.com/"; //需要访问的华为云服务地址 String targetConsoleURL = "https://console.huaweicloud.com/iam/?region=cn-north-4"; //创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。 String FederationProxyUrl = authURL + "?idp_login_url=" + URLEncoder.encode(enterpriseSystemLoginURL, "UTF-8") + "&service=" + URLEncoder.encode(targetConsoleURL, "UTF-8") + "&logintoken=" +URLEncoder.encode(loginToken, "UTF-8");
  • Python示例代码 以下示例说明了如何使用Python编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云开发者 Python 软件开发工具包 (Python SDK)开发。 from huaweicloudsdkcore.auth.credentials import GlobalCredentials from huaweicloudsdkcore.http.http_config import HttpConfig from huaweicloudsdkiam.v3 import * import urllib # 使用全局域名获取自定义代理登录票据 endpoint = "https://iam.myhuaweicloud.com" # 配置客户端属性 config = HttpConfig.get_default_config() config.ignore_ssl_verification = True config.proxy_protocol = "https" config.proxy_host = "proxy.huawei.com" config.proxy_port = 8080 credentials = GlobalCredentials(ak, sk, domain_id) # 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节 client = IamClient().new_builder(IamClient) \ .with_http_config(config) \ .with_credentials(credentials) \ .with_endpoint(endpoint) \ .build() # CreateTemporaryAccessKeyByToken # 调用通过token获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securityToken # 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。 # 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。 identity_methods = ["token"] identity_token = IdentityToken(duration_seconds=3600) body = CreateTemporaryAccessKeyByTokenRequestBody( TokenAuth(TokenAuthIdentity(methods=identity_methods, token=identity_token))) request = CreateTemporaryAccessKeyByTokenRequest(body) create_temporary_access_key_by_token_response = client.create_temporary_access_key_by_token(request) credential = create_temporary_access_key_by_token_response.credential # CreateLoginToken # 获取自定义代理登录票据logintoken。 # logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。 # 调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。 # 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。 # 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。 login_token_security_token = LoginTokenSecurityToken(access=credential.access, secret=credential.secret, id=credential.securitytoken, duration_seconds=1800) body = CreateLoginTokenRequestBody(LoginTokenAuth(login_token_security_token)) request = CreateLoginTokenRequest(body) create_login_token_response = client.create_login_token(request) login_token = create_login_token_response.x_subject_login_token #自定义代理登录地址 auth_URL = "https://auth.huaweicloud.com/authui/federation/login" #企业管理系统登录地址 enterprise_system_login_URL = "https://example.com/" #需要访问的华为云服务地址 target_console_URL = "https://console.huaweicloud.com/iam/?region=cn-north-4" # 创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。 FederationProxyUrl = auth_URL + "?idp_login_url=" + urllib.parse.quote( enterprise_system_login_URL) + "&service=" + urllib.parse.quote( target_console_URL) + "&logintoken=" + urllib.parse.quote(login_token) print(FederationProxyUrl)
  • 操作步骤 在DomainA中创建IAM用户(用户名以UserB为例),具体方法请参见:创建IAM用户。 (可选)将用户UserB加入用户组中(用户组名以GroupC为例),并为用户组授予必要的权限,具体方法请参见:创建用户组并授权 将UserB的访问密钥或用户名和密码(推荐使用访问密钥)配置到企业IdP的配置文件中,以便获取用户认证token。为了保障您的帐号安全,密码和访问密钥建议加密存储。 企业管理员登录企业管理系统后,访问自定义代理,从用户列表中选择需要登录华为云的企业用户,具体操作请参见企业管理系统帮助文档。此处以企业管理员选择2中配置的用户UserB为例。 自定义代理的用户列表是在华为帐号下的IAM用户列表,将IAM用户的访问密钥或用户名和密码(推荐使用访问密钥)配置到企业IdP的配置文件中,即可将这些用户按需赋予不同企业用户。 企业IdP自定义代理携带IAM用户UserB的token调用API(POST /v3.0/OS-CREDENTIAL/securitytokens),获取临时访问密钥和securityToken,调用方法请参见:通过token获取临时访问密钥和securitytoken。 企业IdP自定义代理携带获取到的临时访问密钥和securitytoken通过全局域名(iam.myhuaweicloud.com)调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken。登录票据位于Response Header中的X-Subject-LoginToken。获取方式请参见:获取自定义代理登录票据。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken时,需要使用全局域名:iam.myhuaweicloud.com。 logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息,默认有效期为10分钟。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)时可以设置logintoken的有效时间,有效时间设置范围为10分钟~12小时。如果传入的值大于临时安全凭证securitytoken剩余的过期时间,则使用临时安全凭证securitytoken剩余的过期时间。 企业IdP自定义代理根据如下规范创建云服务代理登录地址,并作为Location返回给浏览器: https://auth.huaweicloud.com/authui/federation/login?idp_login_url={enterprise_system_loginURL}&service={console_service_region_url}&logintoken={logintoken} 示例: https://auth.huaweicloud.com/authui/federation/login?idp_login_url=https%3A%2F%2Fexample.com&service=https%3a%2f%2fconsole.huaweicloud.com%2fapm%2f%3fregion%3dcn-north-4%23%2fapm%2fatps%2ftopology&logintoken=****** 表1 参数说明 参数 说明 idp_login_url 企业管理系统登录地址。 service 需要访问的华为云服务地址。 logintoken 自定义代理登录票据。 您可以参考以下Demo示例创建云服务登录地址:使用token方式创建云服务登录地址 云服务代理登录地址中包含从IAM获得的登录票据loginToken,loginToken用于对访问的用户进行身份验证。云服务代理登录地址中每个参数的值都需要经过UrlEncode编码。 华为云认证登录票据loginToken成功后,浏览器自动重定向到需要访问的华为云服务地址,即云服务代理登录地址中service设定的地址,企业用户成功访问华为云的控制台。 loginToken认证失败,则重定向到idp_login_url设定的地址。