Files
bruno/packages/bruno-tests/src/auth/oauth2/clientCredentials.js
lohit 858536e13d feat(#1003): collection level oauth2, access_token_url & scope for 'Client Credentials' and 'Password Credentials' grant types (#1691)
* feat(#1003): authorization_code grant type PKCE support, code cleanup..
---------

Co-authored-by: lohit-1 <lohit@usebruno.com>
2024-03-04 15:21:05 +05:30

68 lines
1.9 KiB
JavaScript

const express = require('express');
const router = express.Router();
const crypto = require('crypto');
const clients = [
{
client_id: 'client_id_1',
client_secret: 'client_secret_1',
scope: 'admin'
}
];
const tokens = [];
function generateUniqueString() {
return crypto.randomBytes(16).toString('hex');
}
router.post('/token', (req, res) => {
let grant_type, client_id, client_secret, scope;
if (req?.body?.grant_type) {
grant_type = req?.body?.grant_type;
client_id = req?.body?.client_id;
client_secret = req?.body?.client_secret;
scope = req?.body?.scope;
} else if (req?.headers?.grant_type) {
grant_type = req?.headers?.grant_type;
client_id = req?.headers?.client_id;
client_secret = req?.headers?.client_secret;
scope = req?.headers?.scope;
}
console.log('client_cred', client_id, client_secret, scope);
if (grant_type !== 'client_credentials') {
return res.status(401).json({ error: 'Invalid Grant Type, expected "client_credentials"' });
}
const client = clients.find((c) => c.client_id == client_id && c.client_secret == client_secret && c.scope == scope);
if (!client) {
return res.status(401).json({ error: 'Invalid client details or scope' });
}
const token = generateUniqueString();
tokens.push({
token,
client_id,
client_secret,
scope
});
return res.json({ message: 'Authenticated successfully', access_token: token, scope });
});
router.get('/resource', (req, res) => {
try {
const { token } = req.query;
const storedToken = tokens.find((t) => t.token === token);
if (!storedToken) {
return res.status(401).json({ error: 'Invalid Access Token' });
}
return res.json({ resource: { name: 'foo', email: 'foo@bar.com' } });
} catch (err) {
return res.status(401).json({ error: 'Corrupt Access Token' });
}
});
module.exports = router;