Add JWT ID claim to tokens issued by SurrealDB (#3651)
This commit is contained in:
parent
2fe4f352be
commit
cb3ca6dd39
3 changed files with 13 additions and 0 deletions
|
@ -11,6 +11,7 @@ use crate::sql::Value;
|
||||||
use chrono::{Duration, Utc};
|
use chrono::{Duration, Utc};
|
||||||
use jsonwebtoken::{encode, EncodingKey};
|
use jsonwebtoken::{encode, EncodingKey};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
pub async fn signin(
|
pub async fn signin(
|
||||||
kvs: &Datastore,
|
kvs: &Datastore,
|
||||||
|
@ -155,6 +156,7 @@ pub async fn sc(
|
||||||
iat: Some(Utc::now().timestamp()),
|
iat: Some(Utc::now().timestamp()),
|
||||||
nbf: Some(Utc::now().timestamp()),
|
nbf: Some(Utc::now().timestamp()),
|
||||||
exp,
|
exp,
|
||||||
|
jti: Some(Uuid::new_v4().to_string()),
|
||||||
ns: Some(ns.to_owned()),
|
ns: Some(ns.to_owned()),
|
||||||
db: Some(db.to_owned()),
|
db: Some(db.to_owned()),
|
||||||
sc: Some(sc.to_owned()),
|
sc: Some(sc.to_owned()),
|
||||||
|
@ -228,6 +230,7 @@ pub async fn db(
|
||||||
iat: Some(Utc::now().timestamp()),
|
iat: Some(Utc::now().timestamp()),
|
||||||
nbf: Some(Utc::now().timestamp()),
|
nbf: Some(Utc::now().timestamp()),
|
||||||
exp,
|
exp,
|
||||||
|
jti: Some(Uuid::new_v4().to_string()),
|
||||||
ns: Some(ns.to_owned()),
|
ns: Some(ns.to_owned()),
|
||||||
db: Some(db.to_owned()),
|
db: Some(db.to_owned()),
|
||||||
id: Some(user),
|
id: Some(user),
|
||||||
|
@ -281,6 +284,7 @@ pub async fn ns(
|
||||||
iat: Some(Utc::now().timestamp()),
|
iat: Some(Utc::now().timestamp()),
|
||||||
nbf: Some(Utc::now().timestamp()),
|
nbf: Some(Utc::now().timestamp()),
|
||||||
exp,
|
exp,
|
||||||
|
jti: Some(Uuid::new_v4().to_string()),
|
||||||
ns: Some(ns.to_owned()),
|
ns: Some(ns.to_owned()),
|
||||||
id: Some(user),
|
id: Some(user),
|
||||||
..Claims::default()
|
..Claims::default()
|
||||||
|
@ -332,6 +336,7 @@ pub async fn root(
|
||||||
iat: Some(Utc::now().timestamp()),
|
iat: Some(Utc::now().timestamp()),
|
||||||
nbf: Some(Utc::now().timestamp()),
|
nbf: Some(Utc::now().timestamp()),
|
||||||
exp,
|
exp,
|
||||||
|
jti: Some(Uuid::new_v4().to_string()),
|
||||||
id: Some(user),
|
id: Some(user),
|
||||||
..Claims::default()
|
..Claims::default()
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,6 +10,7 @@ use crate::sql::Value;
|
||||||
use chrono::{Duration, Utc};
|
use chrono::{Duration, Utc};
|
||||||
use jsonwebtoken::{encode, EncodingKey};
|
use jsonwebtoken::{encode, EncodingKey};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
pub async fn signup(
|
pub async fn signup(
|
||||||
kvs: &Datastore,
|
kvs: &Datastore,
|
||||||
|
@ -73,6 +74,7 @@ pub async fn sc(
|
||||||
iss: Some(SERVER_NAME.to_owned()),
|
iss: Some(SERVER_NAME.to_owned()),
|
||||||
iat: Some(Utc::now().timestamp()),
|
iat: Some(Utc::now().timestamp()),
|
||||||
nbf: Some(Utc::now().timestamp()),
|
nbf: Some(Utc::now().timestamp()),
|
||||||
|
jti: Some(Uuid::new_v4().to_string()),
|
||||||
exp: Some(
|
exp: Some(
|
||||||
match sv.session {
|
match sv.session {
|
||||||
Some(v) => {
|
Some(v) => {
|
||||||
|
|
|
@ -18,6 +18,8 @@ pub struct Claims {
|
||||||
pub exp: Option<i64>,
|
pub exp: Option<i64>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub iss: Option<String>,
|
pub iss: Option<String>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub jti: Option<String>,
|
||||||
#[serde(alias = "ns")]
|
#[serde(alias = "ns")]
|
||||||
#[serde(alias = "NS")]
|
#[serde(alias = "NS")]
|
||||||
#[serde(rename = "NS")]
|
#[serde(rename = "NS")]
|
||||||
|
@ -86,6 +88,10 @@ impl From<Claims> for Value {
|
||||||
if let Some(exp) = v.exp {
|
if let Some(exp) = v.exp {
|
||||||
out.insert("exp".to_string(), exp.into());
|
out.insert("exp".to_string(), exp.into());
|
||||||
}
|
}
|
||||||
|
// Add jti field if set
|
||||||
|
if let Some(jti) = v.jti {
|
||||||
|
out.insert("jti".to_string(), jti.into());
|
||||||
|
}
|
||||||
// Add NS field if set
|
// Add NS field if set
|
||||||
if let Some(ns) = v.ns {
|
if let Some(ns) = v.ns {
|
||||||
out.insert("NS".to_string(), ns.into());
|
out.insert("NS".to_string(), ns.into());
|
||||||
|
|
Loading…
Reference in a new issue