public static AssumeRoleResponse Unmarshall(UnmarshallerContext context) { AssumeRoleResponse assumeRoleResponse = new AssumeRoleResponse() { HttpResponse = context.HttpResponse, RequestId = context.StringValue("AssumeRole.RequestId") }; AssumeRoleResponse.Credentials_ credentials = new AssumeRoleResponse.Credentials_() { SecurityToken = context.StringValue("AssumeRole.Credentials.SecurityToken"), AccessKeySecret = context.StringValue("AssumeRole.Credentials.AccessKeySecret"), AccessKeyId = context.StringValue("AssumeRole.Credentials.AccessKeyId"), Expiration = context.StringValue("AssumeRole.Credentials.Expiration") }; assumeRoleResponse.Credentials = credentials; AssumeRoleResponse.AssumedRoleUser_ assumedRoleUser = new AssumeRoleResponse.AssumedRoleUser_() { Arn = context.StringValue("AssumeRole.AssumedRoleUser.Arn"), AssumedRoleId = context.StringValue("AssumeRole.AssumedRoleUser.AssumedRoleId") }; assumeRoleResponse.AssumedRoleUser = assumedRoleUser; return(assumeRoleResponse); }
public static AssumeRoleResponse.Credentials_ GetSecurityToken() { if (credentials != null && (DateTime.Now - _timeStamp).Seconds < 30) { //防止请求过于频繁,设置5分钟请求一次。 return(credentials); } // 构建一个 Aliyun Client, 用于发起请求 // 构建Aliyun Client时需要设置AccessKeyId和AccessKeySevcret // STS是Global Service, API入口位于杭州, 这里Region填写"cn-hangzhou" IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret); var client = new DefaultAcsClient(profile); // 构造AssumeRole请求 var request = new AssumeRoleRequest(); // 指定角色Arn request.RoleArn = "acs:ram::1724377057077130:role/myfirstrole"; request.RoleSessionName = "alice"; // 可以设置Token有效期,可选参数,默认3600秒; request.DurationSeconds = 3600; // 可以设置Token的附加Policy,可以在获取Token时,通过额外设置一个Policy进一步减小Token的权限; // request.Policy="<policy-content>" try { AssumeRoleResponse response = client.GetAcsResponse(request); //Console.WriteLine("AccessKeyId: " + response.Credentials.AccessKeyId); //Console.WriteLine("AccessKeySecret: " + response.Credentials.AccessKeySecret); //Console.WriteLine("SecurityToken: " + response.Credentials.SecurityToken); ////Token过期时间;服务器返回UTC时间,这里转换成北京时间显示; //Console.WriteLine("Expiration: " + DateTime.Parse(response.Credentials.Expiration).ToLocalTime()); credentials = response.Credentials; _timeStamp = DateTime.Now; return(credentials); } catch (Exception ex) { return(null); //记录错误日志 } }