string value = role.id + ":" + role_session_name;
s->env.emplace(condition, value);
+ s->env.emplace("aws:TokenIssueTime", token_issued_at);
+
s->token_claims.emplace_back("sts");
for (auto& it : token_claims) {
s->token_claims.emplace_back(it);
string token_policy;
string role_session_name;
std::vector<string> token_claims;
+ string token_issued_at;
public:
const rgw_user& user_id,
const string& token_policy,
const string& role_session_name,
- const std::vector<string>& token_claims)
+ const std::vector<string>& token_claims,
+ const string& token_issued_at)
: role(role),
user_id(user_id),
token_policy(token_policy),
role_session_name(role_session_name),
- token_claims(token_claims) {}
+ token_claims(token_claims),
+ token_issued_at(token_issued_at) {}
uint32_t get_perms_from_aclspec(const DoutPrefixProvider* dpp, const aclspec_t& aclspec) const override {
return 0;
virtual ~Factory() {}
virtual aplptr_t create_apl_role( CephContext* cct,
const req_state* s,
- const rgw::auth::RoleApplier::Role& role_name,
+ const rgw::auth::RoleApplier::Role& role,
const rgw_user& user_id,
const std::string& token_policy,
const std::string& role_session,
- const std::vector<string>& token_claims) const = 0;
+ const std::vector<string>& token_claims,
+ const std::string& token_issued_at) const = 0;
};
};
const rgw_user& user_id,
const std::string& token_policy,
const std::string& role_session_name,
- const std::vector<string>& token_claims) const override {
+ const std::vector<string>& token_claims,
+ const std::string& token_issued_at) const override {
auto apl = rgw::auth::add_sysreq(cct, ctl, s,
- rgw::auth::RoleApplier(cct, role, user_id, token_policy, role_session_name, token_claims));
+ rgw::auth::RoleApplier(cct, role, user_id, token_policy, role_session_name, token_claims, token_issued_at));
return aplptr_t(new decltype(apl)(std::move(apl)));
}
get_creds_info(token));
return result_t::grant(std::move(apl), completer_factory(boost::none));
} else if (token.acct_type == TYPE_ROLE) {
- auto apl = role_apl_factory->create_apl_role(cct, s, r, user_id, token.policy, token.role_session, token.token_claims);
+ auto apl = role_apl_factory->create_apl_role(cct, s, r, user_id, token.policy, token.role_session, token.token_claims, token.issued_at);
return result_t::grant(std::move(apl), completer_factory(token.secret_access_key));
} else { // This is for all local users of type TYPE_RGW or TYPE_NONE
string subuser;
token.access_key_id = accessKeyId;
token.secret_access_key = secretAccessKey;
token.expiration = expiration;
+ token.issued_at = ceph::to_iso_8601(t);
//Authorization info
if (policy)
uint32_t acct_type;
string role_session;
std::vector<string> token_claims;
+ string issued_at;
SessionToken() {}
void encode(bufferlist& bl) const {
- ENCODE_START(3, 1, bl);
+ ENCODE_START(4, 1, bl);
encode(access_key_id, bl);
encode(secret_access_key, bl);
encode(expiration, bl);
encode(acct_type, bl);
encode(role_session, bl);
encode(token_claims, bl);
+ encode(issued_at, bl);
ENCODE_FINISH(bl);
}
void decode(bufferlist::const_iterator& bl) {
- DECODE_START(3, bl);
+ DECODE_START(4, bl);
decode(access_key_id, bl);
decode(secret_access_key, bl);
decode(expiration, bl);
if (struct_v >= 3) {
decode(token_claims, bl);
}
+ if (struct_v >= 4) {
+ decode(issued_at, bl);
+ }
DECODE_FINISH(bl);
}
};