summaryrefslogtreecommitdiff
path: root/src/oauth/types.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/oauth/types.rs')
-rw-r--r--src/oauth/types.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/oauth/types.rs b/src/oauth/types.rs
index 6c62edf..0f9be5c 100644
--- a/src/oauth/types.rs
+++ b/src/oauth/types.rs
@@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
+use crate::oauth::pkce::CodeChallengeMethod;
#[derive(Debug, Serialize, Deserialize)]
pub struct Claims {
@@ -9,6 +10,8 @@ pub struct Claims {
pub iat: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub scope: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub jti: Option<String>, // JWT ID for token tracking
}
#[derive(Debug, Serialize, Deserialize)]
@@ -27,6 +30,8 @@ pub struct ErrorResponse {
pub error: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_description: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub error_uri: Option<String>,
}
#[derive(Debug, Clone)]
@@ -36,4 +41,44 @@ pub struct AuthCode {
pub scope: Option<String>,
pub expires_at: u64,
pub user_id: String,
+ // PKCE support
+ pub code_challenge: Option<String>,
+ pub code_challenge_method: Option<CodeChallengeMethod>,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct TokenIntrospectionRequest {
+ pub token: String,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub token_type_hint: Option<String>,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct TokenIntrospectionResponse {
+ pub active: bool,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub client_id: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub username: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub scope: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub exp: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub iat: Option<u64>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub sub: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub aud: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub iss: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub jti: Option<String>,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct TokenRevocationRequest {
+ pub token: String,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub token_type_hint: Option<String>,
}