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 ---
|
||||
const querystring = require('querystring');
|
||||
|
||||
const session = require('express-session');
|
||||
|
||||
|
||||
const express = require('express');
|
||||
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 +' });
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
return res.status(500).json({ error: 'erro na consulta' });
|
||||
return res.status(500).json({ error: 'Erro na consulta' });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
// 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);
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Servidor rodando na porta ${PORT}`);
|
||||
});
|
||||
|
||||
// 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