pub trait JwtGenerator: Send + Sync {
// Required methods
fn generate_jwt<'life0, 'async_trait>(
&'life0 self,
app_id: GitHubAppId,
) -> Pin<Box<dyn Future<Output = Result<JsonWebToken, AuthError>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn expiration_duration(&self) -> Duration;
}Expand description
Interface for JWT token generation and signing.
This trait abstracts JWT generation to allow for different implementations (production RSA signing, mock generators for testing, etc.).
§Examples
let app_id = GitHubAppId::new(123456);
let token = generator.generate_jwt(app_id).await.unwrap();
assert!(!token.is_expired());Required Methods§
Sourcefn generate_jwt<'life0, 'async_trait>(
&'life0 self,
app_id: GitHubAppId,
) -> Pin<Box<dyn Future<Output = Result<JsonWebToken, AuthError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn generate_jwt<'life0, 'async_trait>(
&'life0 self,
app_id: GitHubAppId,
) -> Pin<Box<dyn Future<Output = Result<JsonWebToken, AuthError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Generate a JWT token for GitHub App authentication.
Creates a JWT with the following claims:
iss: GitHub App IDiat: Current timestamp (issued at)exp: Expiration timestamp (issued at + duration, max 10 minutes)
§Arguments
app_id- The GitHub App ID to include in the token
§Returns
A JsonWebToken containing the signed JWT string and metadata.
§Errors
Returns AuthError if:
- Private key is invalid or cannot be loaded
- JWT signing fails
- System clock is unreliable
§Examples
let app_id = GitHubAppId::new(123456);
let jwt = generator.generate_jwt(app_id).await.expect("JWT generation failed");
// Token is valid for up to 10 minutes
assert!(!jwt.is_expired());
assert_eq!(jwt.app_id(), app_id);Sourcefn expiration_duration(&self) -> Duration
fn expiration_duration(&self) -> Duration
Get the JWT expiration duration configured for this generator.
Returns the duration from issuance to expiration. This value should not exceed 10 minutes (GitHub’s maximum).