STS相關接口
更新時間 2025-10-11 11:19:14
最近更新時間: 2025-10-11 11:19:14
分享文章
STS即Secure Token Service 是一種安全憑證服務,可以使用STS來完成對于臨時用戶的訪問授權。對于跨用戶短期訪問對象存儲資源時,可以使用STS服務。這樣就不需要透露主賬號AK/SK,只需要生成一個短期訪問憑證給需要的用戶使用即可,避免主賬號AK/SK泄露帶來的安全風險。
獲取臨時token
在服務端生成臨時token,可參考java、python、nodejs、CPP、donet、go、php SDK說明,請從 SDK概覽 頁面選擇進入對應的開發指南查閱。
使用臨時token
實現一個MyCredentialsProvider,支持更新ak/sk和token。
// .h
@interface MyCredentialsProvider: NSObject <AWSCredentialsProvider>
?
- (instancetype)initWithAccessKey:(NSString *)accessKey
secretKey:(NSString *)secretKey
sessionToken:(NSString *)sessionToken;
?
- (void)updateCredWithAccessKey:(NSString *)accessKey
secretKey:(NSString *)secretKey
sessionToken:(NSString *)sessionToken;
@end
?
?
// .m
@interface MyCredentialsProvider()
@property (atomic, strong) AWSCredentials *internalCredentials;
@end
?
@implementation MyCredentialsProvider
- (instancetype)initWithAccessKey:(NSString *)accessKey
secretKey:(NSString *)secretKey
sessionToken:(NSString *)sessionToken {
if (self = [super init]) {
_internalCredentials = [[AWSCredentials alloc] initWithAccessKey:accessKey
secretKey:secretKey
sessionKey:sessionToken
expiration:nil];
}
return self;
}
?
- (AWSTask<AWSCredentials *> *)credentials {
return [AWSTask taskWithResult:self.internalCredentials];
}
?
- (void)invalidateCachedTemporaryCredentials {
}
?
- (void)updateCredWithAccessKey:(NSString *)accessKey
secretKey:(NSString *)secretKey
sessionToken:(NSString *)sessionToken {
self.internalCredentials = [[AWSCredentials alloc] initWithAccessKey:accessKey
secretKey:secretKey
sessionKey:sessionToken
expiration:nil];
}
@end使用臨時token初始化sdk
#define ACCESS_KEY @"<your-access-key>"
#define SECRET_KEY @"<your-secret-key>"
#define ENDPOINT @"<your-endpoint>"
#define SESSION_TOKEN @"<your-session-token>"
?
-(id)initWithToken {
if (self = [super init]) {
self.credProvider = [[MyCredentialsProvider alloc] initWithAccessKey:ACCESS_KEY secretKey:SECRET_KEY sessionToken:SESSION_TOKEN];
AWSEndpoint *endPoint = [[AWSEndpoint alloc] initWithURLString:ENDPOINT];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc]
initWithRegion:AWSRegionUSEast1
endpoint:endPoint
credentialsProvider:self.credProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;
self.s3 = [AWSS3 defaultS3];
}
return self;
}