原文:
https://www.cnblogs.com/ou11/p/10133217.html
1.在阿里云控制台-访问控制中创建读写权限策略
https://help.aliyun.com/document_detail/31935.html?spm=5176.doc32069.2.4.AxKPsA%EF%BC%89
新建自定义策略
权限策略格式
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:DeleteObject", "oss:ListParts", "oss:AbortMultipartUpload", "oss:PutObject", "oss:GetObject" ], "Resource": [ "acs:oss:*:*:YourBucketName", "acs:oss:*:*:YourBucketName/*" ] } ] }
2.创建角色
新建RAM角色
3.为新增的角色添加自定义权限策略
获取到ARN
4.创建子账号
获取到AccessKeyID和AccessKeySecret
为该用户添加调用STS服务AssumeRole接口的权限
5.服务端调用
添加依赖
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-sts</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.5.0</version> </dependency>
赋予角色方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
/**
* 赋予角色
*
* @param accessKeyId
* @param accessKeySecret
* @param roleArn
* @param roleSessionName
* @param policy
* @param seconds
* @param protocolType
* @return
* @author 欧解决
* @date 2018-12-17 17:32:18
**/
public
AssumeRoleResponse assumeRole(
String regionId,
String accessKeyId,
String accessKeySecret,
String roleArn,
String roleSessionName,
String policy,
Long seconds) {
try
{
// 创建一个 Aliyun Acs Client, 用于发起 OpenAPI 请求
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client =
new
DefaultAcsClient(profile);
// 创建一个 AssumeRoleRequest 并设置请求参数
final
AssumeRoleRequest request =
new
AssumeRoleRequest();
//POST请求
request.setMethod(MethodType.POST);
//https协议
request.setProtocol(ProtocolType.HTTPS);
//持续时间
request.setDurationSeconds(seconds);
//角色id
request.setRoleArn(roleArn);
//应用程序标识(自己定义)
request.setRoleSessionName(roleSessionName);
//在赋予角色的同时,还赋予其他的权限策略
request.setPolicy(policy);
// 发起请求,并得到response
final
AssumeRoleResponse response = client.getAcsResponse(request);
return
response;
}
catch
(Exception e) {
e.printStackTrace();
}
return
null
;
}
|
Controller调用
@Autowired
private OSSProperties ossProperties;
@Autowired
private StsService stsService;
/** * 签名授权 * * @return * @author 欧解决 * @date 2018-12-17 15:08:55 **/ @GetMapping("/getOssToken") public Object getOssToken() { AssumeRoleResponse response = stsService.assumeRole( ossProperties.getRegionId(), ossProperties.getAccessKey(), ossProperties.getAccessSecret(), ossProperties.getRoleArn(), "my-session-name", null, 3600L ); if (response != null) { return new BaseTRo<>(response.getCredentials()); } return new BaseRo(SystemError.ProcessMsg, "OssToken获取失败"); }
接口返回数据
1
2
3
4
5
6
7
8
9
10
|
{
"code"
:
"0"
,
"msg"
:
""
,
"data"
: {
"securityToken"
:
"CAIS7gF1q6Ft5B2yfSjIr4vaMc+F2Ilz+7ahTH+IgXgFfuQY3LzdtTz2IHxJfHBhBusev/4+mGlT5/8ZlqNzVplUWEqBZNNxtn6HNrUyJ9ivgde8yJBZor/HcDHhJnyW9cvWZPqDP7G5U/yxalfCuzZuyL/hD1uLVECkNpv74vwOLK5gPG+CYCFBGc1dKyZ7tcYeLgGxD/u2NQPwiWeiZygB+CgE0DMvs/rknJPAs0KE1QalltV4/dqhfsKWCOB3J4p6XtuP2+h7S7HMyiY46WIRqPou1f0bom+W5IDBWgIAuk6cXurJ48BpPNnK5EGq9GovGoABfy0gMkLTYW4gEzdc5wxcZNWl/orL/DmvymDIWe1M/u/JUDpA3NfQTTnxG9xSxTz4lwPeEG9LgoYZzXuDTtmRcl/wQetvjDU7PBC1urYMNtVlyaST3jGfa+WU0zAW57zOBqeBejxui9AE1JCOcg2CDA/u5Mz2Hu79Ci7UTJ0eusw="
,
"accessKeySecret"
:
"FAA1KeGnmMEWjYHaKuL5WP5NSeVVFor7hMHd4VBQ7Uaa"
,
"accessKeyId"
:
"STS.NHozu15VRLuJNY9exPrk13yvW"
,
"expiration"
:
"2018-12-17T11:52:38Z"
}
}
|