认证函数调用过程

只是梳理了函数调用,没有详细代码注释

/*
s3_main_strategy_t(CephContext* const cct, ImplicitTenants& implicit_tenant_context, RGWCtl* const ctl)
  : s3_main_strategy_plain(cct, implicit_tenant_context, ctl), s3_main_strategy_boto2(cct, implicit_tenant_context, ctl) {
      add_engine(Strategy::Control::SUFFICIENT, s3_main_strategy_plain);
      add_engine(Strategy::Control::FALLBACK, s3_main_strategy_boto2);
}
auth_stack = [<s3_main_strategy_plain, Strategy::Control::SUFFICIENT>, <s3_main_strategy_boto2, Strategy::Control::FALLBACK>]
*/

rgw_main() 
1:初始化 auth_registry
rgw::auth::ImplicitTenants implicit_tenant_context{g_conf()};
g_conf().add_observer(&implicit_tenant_context);
auto auth_registry = \
    rgw::auth::StrategyRegistry::create(g_ceph_context, implicit_tenant_context, store->getRados()->pctl);
2:beast 初始化
if (framework == "beast") {
  RGWProcessEnv env{ store, &rest, olog, port, uri_prefix, auth_registry };
  fe = new RGWAsioFrontend(env, config, sched_ctx);
  
  fe->init()
  fe->run() ---> AsioFrontend::run ---> 启动 cct->_conf->rgw_thread_pool_size(512)接收线程
}

接收线程开始accept,auth_registry 已经在rgw_main中通过creat初始化
AsioFrontend::accept
template <typename Stream> void handle_connection
process_request

认证
/* RGWRESTMgr_S3::get_handler
if (s->init_state.url_bucket.empty()) {
  handler = new RGWHandler_REST_Service_S3(auth_registry, enable_sts, enable_iam, enable_pubsub);
} else if (s->object.empty()) {
  handler = new RGWHandler_REST_Bucket_S3(auth_registry, enable_pubsub);
} else {
  handler = new RGWHandler_REST_Obj_S3(auth_registry);
}
*/
RGWHandler_REST *handler = rest->get_handler(store, s, auth_registry, frontend_prefix,client_io, &mgr, &init_error);

/*
op->verify_requester ---> dialect_handler->authorize(this);
dialect_handler 在  op->init(store, s, this) 初始化即为this,this为 RGWRESTMgr_S3::get_handler 返回值
如果为getobj操作,则authentic为 ---> RGWHandler_REST_S3::authorize(RGWGetObj_ObjStore_S3*)
class RGWOp : public DoutPrefixProvider
*/
ret = op->verify_requester(auth_registry);    // RGWHandler_REST_S3::authorize
RGW_Auth_S3::authorize(dpp, store, auth_registry, s)
rgw::auth::Strategy::apply(dpp, auth_registry.get_s3_main(), s);  // auth_registry.get_s3_main() ---> s3_main_strategy
rgw::auth::Strategy::authenticate
engine_result = engine.authenticate(dpp, s);    //   AWSEngine::authenticate
AWSGeneralAbstractor::get_auth_data
AWSGeneralAbstractor::get_auth_data_v4
get_v4_signature
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值