Skip to main content

OAuthHelper

Struct OAuthHelper 

Source
pub struct OAuthHelper { /* private fields */ }
Expand description

OAuth helper for CLI authentication flows.

Supports both Authorization Code Flow with PKCE and Device Code Flow, with automatic discovery of OAuth endpoints from the MCP server URL.

Implementations§

Source§

impl OAuthHelper

Source

pub fn new(config: OAuthConfig) -> Result<OAuthHelper, Error>

Create a new OAuth helper with the given configuration.

Source

pub async fn get_access_token(&self) -> Result<String, Error>

Get or refresh access token, performing OAuth flow if needed.

For callers that only need a bearer-header value. Cache consumers that need to persist refresh_token / expires_at / issuer across runs should use authorize_with_details instead.

Source

pub async fn authorize_with_details(&self) -> Result<AuthorizationResult, Error>

Like get_access_token but returns the full authorization result for cache persistence.

Cache callers (e.g., cargo pmcp auth login) should prefer this method; simple callers that just need a bearer header can keep using get_access_token.

Drives DCR lazily when eligible; runs PKCE via the authorization_code flow; captures refresh_token, expires_at, scopes, and the effective issuer + client_id.

§Device-code fallback

If the authorization-code flow fails and the server advertises a device_authorization_endpoint, this method falls back to device code flow (RFC 8628). In that case, refresh_token may be None since RFC 8628 §3.5 does not require it, and scopes falls back to the requested scopes when the token response does not echo them.

Source

pub async fn create_middleware_chain( &self, ) -> Result<Arc<HttpMiddlewareChain>, Error>

Create HTTP middleware chain with OAuth bearer token.

Obtains an access token (from cache, refresh, or interactive flow) and wraps it in a middleware chain suitable for HTTP transports.

Trait Implementations§

Source§

impl Debug for OAuthHelper

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more