You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中生成AWS会话令牌并完成API调用?

在C#中获取AWS会话令牌并调用API的实现方案

以下是基于AWS官方.NET SDK的实用实现方案,覆盖两种常见场景:

1. 使用IAM用户长期凭证获取临时会话令牌

首先安装AWS STS SDK依赖包:

Install-Package AWSSDK.SecurityToken

代码实现

using Amazon;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using Amazon.Runtime;

// 初始化STS客户端(推荐从配置/环境变量加载凭证,禁止硬编码)
var stsClient = new AmazonSecurityTokenServiceClient(RegionEndpoint.USWest2); // 替换为你的AWS区域

// 请求临时会话凭证
var request = new GetSessionTokenRequest
{
    DurationSeconds = 3600 // 令牌有效期,最大可设为43200(12小时)
};

var response = await stsClient.GetSessionTokenAsync(request);

// 提取会话令牌及关联凭证
var tempCredentials = response.Credentials;
string accessKey = tempCredentials.AccessKeyId;
string secretKey = tempCredentials.SecretAccessKey;
string sessionToken = tempCredentials.SessionToken;

// 使用临时凭证调用目标API(以Pinpoint为例)
var pinpointClient = new AmazonPinpointClient(
    new SessionAWSCredentials(accessKey, secretKey, sessionToken), 
    RegionEndpoint.USWest2);

// 此处添加调用Pinpoint/API Gateway的业务逻辑

2. 假设IAM角色获取会话令牌(跨账号/角色权限场景)

如果需要通过角色权限访问资源,替换上述请求凭证的逻辑为以下代码:

var assumeRoleRequest = new AssumeRoleRequest
{
    RoleArn = "arn:aws:iam::123456789012:role/YourTargetRole", // 替换为目标角色ARN
    RoleSessionName = "ApiCallSession", // 自定义会话名称,用于审计追踪
    DurationSeconds = 3600
};

var assumeRoleResponse = await stsClient.AssumeRoleAsync(assumeRoleRequest);
var tempCredentials = assumeRoleResponse.Credentials;
// 后续提取凭证、调用API的逻辑与第一种方式一致

核心注意事项

  • 确保你的IAM用户/角色拥有sts:GetSessionToken或sts:AssumeRole的权限,否则会触发认证失败
  • 生产环境禁止硬编码凭证,优先使用AWS凭证文件、环境变量或实例角色(EC2/ECS场景)
  • 令牌有效期可根据业务需求调整,但不得超过AWS规定的上限

内容的提问来源于stack exchange,提问作者Rodney Ellis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:42:44