Skip to content

Commit c4b9d3d

Browse files
sambodinosk06964
authored and
sk06964
committed
Happy path for OIDC token
1 parent f5854be commit c4b9d3d

File tree

7 files changed

+94
-13
lines changed

7 files changed

+94
-13
lines changed

app.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var logger = require('morgan');
66
var mustacheExpress = require('mustache-express');
77

88
var indexRouter = require('./routes/index');
9-
var usersRouter = require('./routes/users');
9+
var oidcRouter = require('./routes/oidc');
1010

1111
var app = express();
1212

@@ -22,7 +22,7 @@ app.use(cookieParser());
2222
app.use(express.static(path.join(__dirname, 'public')));
2323

2424
app.use('/', indexRouter);
25-
app.use('/users', usersRouter);
25+
app.use('/', oidcRouter);
2626

2727
// catch 404 and forward to error handler
2828
app.use(function(req, res, next) {

bin/www

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var http = require('http');
1212
* Get port from environment and store in Express.
1313
*/
1414

15-
var port = normalizePort(process.env.PORT || '3000');
15+
var port = normalizePort(process.env.PORT || '9090');
1616
app.set('port', port);
1717

1818
/**

package-lock.json

+13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"start": "node ./bin/www"
77
},
88
"dependencies": {
9+
"axios": "^0.20.0",
910
"cookie-parser": "~1.4.4",
1011
"debug": "~2.6.9",
1112
"express": "~4.16.1",

routes/index.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@ var router = express.Router();
33

44
/* GET home page. */
55
router.get('/', function(req, res, next) {
6-
res.render('index', { title: 'Express' });
6+
res.render('index', {
7+
clientId: '',
8+
clientSecret: '',
9+
wellKnown: 'https://signin.johndeere.com/oauth2/aus78tnlaysMraFhC1t7/.well-known/oauth-authorization-server',
10+
callbackUrl: 'http://localhost:9090/callback',
11+
scopes: 'openid profile offline_access ag1 eq1',
12+
state: 'test'
13+
});
714
});
815

916
module.exports = router;

routes/oidc.js

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
const axios = require('axios').default;
2+
const express = require('express');
3+
const router = express.Router();
4+
const qs = require('qs');
5+
6+
let settings,
7+
metaData = {};
8+
9+
const populateSettings = (reqBody) => {
10+
settings = {
11+
clientId: reqBody.clientId,
12+
clientSecret: reqBody.clientSecret,
13+
wellKnown: reqBody.wellKnown,
14+
callbackUrl: reqBody.callbackUrl,
15+
scopes: reqBody.scopes,
16+
state: reqBody.state
17+
};
18+
};
19+
const updateTokenInfo = (token) => {
20+
settings = {
21+
...settings,
22+
idToken: token.id_token,
23+
accessToken: token.access_token,
24+
refreshToken: token.refresh_token,
25+
exp: token.expires_in
26+
};
27+
}
28+
29+
/* Initializes OIDC login */
30+
router.post('/', async function ({ body }, res, next) {
31+
console.log('Beginning OIDC...');
32+
33+
populateSettings(body);
34+
35+
metaData = (await axios.get(body.wellKnown)).data;
36+
const params = new URLSearchParams({
37+
client_id: body.clientId,
38+
response_type: 'code',
39+
scope: body.scopes,
40+
redirect_uri: body.callbackUrl,
41+
state: body.state
42+
});
43+
44+
res.redirect(`${metaData.authorization_endpoint}?${params.toString()}`)
45+
});
46+
47+
/* OIDC callback */
48+
router.get('/callback', async function ({ body, query }, res, next) {
49+
const code = query.code;
50+
const basicAuthHeader = Buffer.from(`${settings.clientId}:${settings.clientSecret}`).toString('base64');
51+
52+
const token = (await axios.post(metaData.token_endpoint, qs.stringify({
53+
grant_type: 'authorization_code',
54+
redirect_uri: settings.callbackUrl,
55+
code,
56+
scope: settings.scopes
57+
}), {
58+
headers: {
59+
'Accept': 'application/json',
60+
'Authorization': `Basic ${basicAuthHeader}`,
61+
'Content-Type': 'application/x-www-form-urlencoded'
62+
}
63+
})).data;
64+
65+
updateTokenInfo(token);
66+
res.render('index', settings);
67+
});
68+
69+
module.exports = router;

routes/users.js

-9
This file was deleted.

0 commit comments

Comments
 (0)