diff --git a/others/oauth2.1-flow.md b/others/oauth2.1-flow.md
index 3b9b0a2..997caf1 100644
--- a/others/oauth2.1-flow.md
+++ b/others/oauth2.1-flow.md
@@ -197,6 +197,7 @@ or [400]
## JWT_BEARER flow
- Core-Class: JwtClientAssertionAuthenticationProvider
+- URL: http://localhost:8080/oauth2/token
-
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index 5487e5e..7e2b4ec 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -13,21 +13,30 @@
-
-
+
+ true
-
-
-
-
-
-
-
-
-
-
-
-
+
+ logs/%d{yyyy-MM-dd}/sos-%i.log
+ 10MB
+ 15
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss} [%-5level] [%.80c{10}][%L] -%m%n
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/java/com/monkeyk/sos/service/JwtBearerFlowTest.java b/src/test/java/com/monkeyk/sos/service/JwtBearerFlowTest.java
new file mode 100644
index 0000000..40f9729
--- /dev/null
+++ b/src/test/java/com/monkeyk/sos/service/JwtBearerFlowTest.java
@@ -0,0 +1,62 @@
+package com.monkeyk.sos.service;
+
+import com.nimbusds.jose.*;
+import com.nimbusds.jose.crypto.MACSigner;
+import com.nimbusds.jwt.JWTClaimsSet;
+import org.junit.jupiter.api.Test;
+
+import java.time.Instant;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+/**
+ * 2023/10/24 10:25
+ *
+ * @author Shengzhao Li
+ * @since 3.0.0
+ */
+public class JwtBearerFlowTest {
+
+
+ /**
+ * MAC 生成 token
+ * HS256
+ * method: CLIENT_SECRET_JWT
+ *
+ * @throws Exception e
+ */
+ @Test
+ void macToken() throws Exception {
+
+ String clientId = "vLIXDF9GXg6Psfh1uzwVFUj0fucX2Zn9";
+ // client_secret 加密后的值
+ String macSecret = "$2a$10$kjjdfA8SIuhlVx0q4B1GYeU..9TNU9.Aj6Vdc2v/iQTJhhmT/0xCi";
+
+ JWSSigner jwsSigner = new MACSigner(macSecret);
+
+ JWSHeader header = new JWSHeader(JWSAlgorithm.HS256);
+
+
+ JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
+ .subject(clientId)
+ .issuer(clientId)
+ .audience("http://127.0.0.1:8080")
+ .expirationTime(Date.from(Instant.now().plusSeconds(300L)))
+ .build();
+
+ Payload payload = new Payload(claimsSet.toJSONObject());
+
+ JWSObject jwsObject = new JWSObject(header, payload);
+ //签名
+ jwsObject.sign(jwsSigner);
+
+ String idToken = jwsObject.serialize();
+ assertNotNull(idToken);
+ System.out.println(idToken);
+
+ }
+
+}