pub trait TokenProvider: Send + Sync {
// Required methods
fn access_token<'a>(
&'a self,
) -> Pin<Box<dyn Future<Output = Result<Option<AccessToken>, AuthError>> + Send + 'a>>;
fn refresh<'a>(
&'a self,
stale_token: Option<&'a str>,
options: Option<RequestOptions>,
) -> Pin<Box<dyn Future<Output = Result<AccessToken, AuthError>> + Send + 'a>>;
}Expand description
Token Provider 抽象:运行时经它获取与刷新访问令牌。
access_token:读取当前可用 token (无凭据时None;实现方不得发起网络请求);refresh:换取新 token 并持久化。
Required Methods§
Sourcefn access_token<'a>(
&'a self,
) -> Pin<Box<dyn Future<Output = Result<Option<AccessToken>, AuthError>> + Send + 'a>>
fn access_token<'a>( &'a self, ) -> Pin<Box<dyn Future<Output = Result<Option<AccessToken>, AuthError>> + Send + 'a>>
当前可用 token;无凭据时返回 None(不发起网络请求)。
Sourcefn refresh<'a>(
&'a self,
stale_token: Option<&'a str>,
options: Option<RequestOptions>,
) -> Pin<Box<dyn Future<Output = Result<AccessToken, AuthError>> + Send + 'a>>
fn refresh<'a>( &'a self, stale_token: Option<&'a str>, options: Option<RequestOptions>, ) -> Pin<Box<dyn Future<Output = Result<AccessToken, AuthError>> + Send + 'a>>
刷新(换取)新 token 并持久化。
stale_token 为本次失败请求所用的失效 token;实现方应做并发刷新
合并——若存储中的 token 已不同于 stale_token,说明并发请求已完成
刷新,直接复用、不再重复换取。
options 为触发刷新的请求携带的请求选项(含 transport 默认叠加的
headers / timeout / extensions);实现方应让引导请求复用它们,保证
传输配置一致(并剥离其中已注入的失效 Authorization 头)。
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".