WIP: Testando atenticação por office 365.
This commit is contained in:
parent
2366fc1eb8
commit
4e966847a4
99
server.js
99
server.js
@ -3,8 +3,6 @@ require('dotenv').config();
|
|||||||
// --- OAuth Office 365 ---
|
// --- OAuth Office 365 ---
|
||||||
const querystring = require('querystring');
|
const querystring = require('querystring');
|
||||||
|
|
||||||
const session = require('express-session');
|
|
||||||
|
|
||||||
|
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const multer = require('multer');
|
const multer = require('multer');
|
||||||
@ -433,102 +431,11 @@ app.get('/consulta-cep', async (req, res) => {
|
|||||||
return res.json({ endereco, latitude: lat, longitude: lon, distancia: '5km +' });
|
return res.json({ endereco, latitude: lat, longitude: lon, distancia: '5km +' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
return res.status(500).json({ error: 'erro na consulta' });
|
return res.status(500).json({ error: 'Erro na consulta' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.listen(PORT, () => {
|
||||||
|
console.log(`Servidor rodando na porta ${PORT}`);
|
||||||
// Configura sessão (precisa vir antes das rotas)
|
|
||||||
app.use(session({
|
|
||||||
secret: process.env.SESSION_SECRET,
|
|
||||||
resave: false,
|
|
||||||
saveUninitialized: false
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Middleware simples pra proteger rotas
|
|
||||||
function ensureAuthenticated(req, res, next) {
|
|
||||||
if (req.session.user) return next();
|
|
||||||
return res.redirect('/login');
|
|
||||||
}
|
|
||||||
|
|
||||||
// === LOGIN COM OFFICE 365 ===
|
|
||||||
|
|
||||||
// Inicia o login (redireciona pro Microsoft)
|
|
||||||
app.get('/login', (req, res) => {
|
|
||||||
const authUrl = new URL(`https://login.microsoftonline.com/${process.env.OAUTH_TENANT_ID}/oauth2/v2.0/authorize`);
|
|
||||||
authUrl.search = new URLSearchParams({
|
|
||||||
client_id: process.env.OAUTH_CLIENT_ID,
|
|
||||||
response_type: 'code',
|
|
||||||
redirect_uri: process.env.OAUTH_REDIRECT_URI,
|
|
||||||
response_mode: 'query',
|
|
||||||
scope: process.env.OAUTH_SCOPES,
|
|
||||||
state: '12345'
|
|
||||||
}).toString();
|
|
||||||
|
|
||||||
res.redirect(authUrl);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Callback chamado pela Microsoft após login
|
|
||||||
app.get('/auth/callback', async (req, res) => {
|
|
||||||
const code = req.query.code;
|
|
||||||
if (!code) return res.status(400).send('Código de autorização não encontrado.');
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Troca o código pelo token
|
|
||||||
const tokenUrl = `https://login.microsoftonline.com/${process.env.OAUTH_TENANT_ID}/oauth2/v2.0/token`;
|
|
||||||
const body = querystring.stringify({
|
|
||||||
client_id: process.env.OAUTH_CLIENT_ID,
|
|
||||||
scope: process.env.OAUTH_SCOPES,
|
|
||||||
code,
|
|
||||||
redirect_uri: process.env.OAUTH_REDIRECT_URI,
|
|
||||||
grant_type: 'authorization_code',
|
|
||||||
client_secret: process.env.OAUTH_CLIENT_SECRET
|
|
||||||
});
|
|
||||||
|
|
||||||
const tokenResponse = await axios.post(tokenUrl, body, {
|
|
||||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
|
|
||||||
});
|
|
||||||
|
|
||||||
const accessToken = tokenResponse.data.access_token;
|
|
||||||
|
|
||||||
// Busca dados do usuário logado (Graph API)
|
|
||||||
const userResponse = await axios.get('https://graph.microsoft.com/v1.0/me', {
|
|
||||||
headers: { Authorization: `Bearer ${accessToken}` }
|
|
||||||
});
|
|
||||||
|
|
||||||
// Guarda usuário e token na sessão
|
|
||||||
req.session.user = userResponse.data;
|
|
||||||
req.session.accessToken = accessToken;
|
|
||||||
|
|
||||||
console.log('Usuário logado:', userResponse.data);
|
|
||||||
|
|
||||||
// Redireciona para a página principal autenticada
|
|
||||||
res.redirect('/home');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Erro no login OAuth:', error.response?.data || error.message);
|
|
||||||
res.status(500).send('Erro ao autenticar com Office 365.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Página protegida (somente logados)
|
|
||||||
app.get('/home', ensureAuthenticated, (req, res) => {
|
|
||||||
const user = req.session.user;
|
|
||||||
res.send(`
|
|
||||||
<h1>Bem-vindo, ${user.displayName}!</h1>
|
|
||||||
<p>Email: ${user.mail || user.userPrincipalName}</p>
|
|
||||||
<a href="/logout">Sair</a>
|
|
||||||
`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Logout (remove sessão)
|
|
||||||
app.get('/logout', (req, res) => {
|
|
||||||
req.session.destroy(() => {
|
|
||||||
res.redirect('/');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
// Inicia o servidor
|
|
||||||
|
|
||||||
app.listen(PORT, () => console.log(`Server running on http://localhost:${PORT}`));
|
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user