diff --git a/src/app/entrar/components/LoginForm.js b/src/app/entrar/components/LoginForm.js
index a0c94697dc50542733e505b0f21b2b3ea59e13ac..6056ffefd6747132e147dc86c7f2d6cd22d8362a 100644
--- a/src/app/entrar/components/LoginForm.js
+++ b/src/app/entrar/components/LoginForm.js
@@ -24,9 +24,29 @@ export default function LoginForm({
   const handleOpenModalPasswd = () => setOpenModalPasswd(true);
   const handleCloseModalPasswd = () => setOpenModalPasswd(false);
 
-  const handleGovBr = () => {
+  const handleGovBr = async () => {
     const state = window.crypto.randomUUID();
     localStorage.setItem("govbr_state", state);
+    async function generateCodeVerifier() {
+      var code_verifier = new Uint8Array(32);
+      window.crypto.getRandomValues(code_verifier);
+      return code_verifier;
+    }
+    function generateCodeChallenge(code_verifier) {
+      return base64URL(window.crypto.subtle.digest("SHA-256", code_verifier));
+    }
+    async function base64URL(buffer) {
+      // use a FileReader to generate a base64 data URI:
+      const base64url = await new Promise(r => {
+        const reader = new FileReader()
+        reader.onload = () => r(reader.result)
+        reader.readAsDataURL(new Blob([buffer]))
+      });
+      // remove the `data:...;base64,` part from the start
+      return base64url.slice(base64url.indexOf(',') + 1);
+    }    
+    const codeVerifier = await generateCodeVerifier();
+    localStorage.setItem("govbr_code_verifier", await base64URL(codeVerifier));
     const params = {
       response_type: "code",
       client_id: "mecredhomologa.c3sl.ufpr.br",
@@ -34,7 +54,7 @@ export default function LoginForm({
       redirect_uri: "https://mecredhomologa.c3sl.ufpr.br/govbr",
       nonce: "1121",
       state,
-      code_challenge: "Ra1GhTAFgJYB8p_uS8XfPnhBMcU1FDyZuIZ4akw5IAM",
+      code_challenge: await generateCodeChallenge(codeVerifier),
       code_challenge_method: "S256",
     };
 
diff --git a/src/app/govbr/page.js b/src/app/govbr/page.js
index 7af42911962cc077d81594a2ceca835c2a6d669b..567242f9a196e150dc0a4e7deae6abc126cdf028 100644
--- a/src/app/govbr/page.js
+++ b/src/app/govbr/page.js
@@ -1,5 +1,6 @@
 "use client"
 import mecredApi from "@/axiosConfig";
+import axios from "axios";
 import { useSearchParams } from "next/navigation";
 import { useEffect } from "react";
 
@@ -7,9 +8,23 @@ export default function Govbr() {
 
     const searchParams = useSearchParams();
 
-    const validate = async () => {
+    const getToken = async (code) => {
         try {
-            const res = await mecredApi.post("/govbr");
+
+            if (!localStorage.getItem("govbr_code_verifier")) {
+                console.error("local storage não possui code verifier.");
+                return
+            }
+            const verifier = localStorage.getItem("govbr_code_verifier");
+
+            const res = await axios.post("http://127.0.0.1:3335/govbr", 
+                {
+                    code,
+                    verifier
+                }
+            );
+
+            console.log("foi")
         } catch(error) {
             console.error(error);
         }
@@ -18,12 +33,11 @@ export default function Govbr() {
     useEffect(() => {
         let code;
         const validateState = () => {
-
-            if (!searchParams.get("govbr_code")) {
+            if (!searchParams.get("code")) {
                 console.error("local storage não possui code.")
                 return
             }
-            code = searchParams.getItem("govbr_code");
+            code = searchParams.get("code");
             console.log(code)
 
             if (!localStorage.getItem("govbr_state")) {
@@ -51,6 +65,6 @@ export default function Govbr() {
             console.log("State validado com sucesso!")
         }
         validateState()
-        
+        getToken(code)
     }, [searchParams]);
 };
\ No newline at end of file