rgw auth

radosgw_rgw_auth.png

版本
mimic-13.2.6

原理

RGW认证机制中涉及的类分为两类,Strategy类和Engine类。

Strategy(认证策略)

  • 通过Strategy::add_engine向Strategy注册Engine,注册过程中需要指定Control
  • Control 包括REQUISITESUFFICIENTFALLBACK
    REQUISITE 表示这个Engine是一个必要条件,若一个注册的Engine返回失败,则立即终止Strategy的认证过程,并且不再对其它注册的Engine进行认证;
    SUFFICIENT 表示这个Engine是一个充要条件,若一个注册的Engine返回成功,则Strategy完成。然而一个Engine的失败,不会终止整个Strategy,直到所有Engine都返回失败;
    FALLBACKSUFFICIENT类似,所有注册的Engine返回失败,返回result_t::deny(reason = -EACCES);
    具体可见strategy_handle_rejectedstrategy_handle_deniedstrategy_handle_granted三个方法。
  • 一个Strategy可以包含多个Strategy和Engine。当验证过程遇到Strategy时,会进行递归调用,直到Engine返回验证结果。
  • 认证的入口为Strategy::apply,由Strategy::apply调用Strategy的authenticate方法开始逐层递归认证。

Engine(认证引擎)

  • Engine处理具体的认证请求,分为S3AnonymousEngineLDAPEngineLocalEngine
  • Engine的认证状态包括DENIEDGRANTEDREJECTED
    DENIED 没有REJECTED那么强烈的认证失败;
    GRANTED 认证成功;
    REJECTED 认证失败,不需要再尝试其它Engine了;