Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Google Authenticator with NodeJS
Search
Philipp Dunkel
March 14, 2014
Programming
0
270
Google Authenticator with NodeJS
Mini-Talk at the first Vienn-NodeJS-Meetup
Philipp Dunkel
March 14, 2014
Tweet
Share
Other Decks in Programming
See All in Programming
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
240
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
4
250
CSC307 Lecture 06
javiergs
PRO
0
680
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
540
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
200
CSC307 Lecture 08
javiergs
PRO
0
670
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
Basic Architectures
denyspoltorak
0
660
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
170
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
610
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Abbi's Birthday
coloredviolet
1
4.7k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Visualization
eitanlees
150
17k
A Tale of Four Properties
chriscoyier
162
24k
The Language of Interfaces
destraynor
162
26k
HDC tutorial
michielstock
1
360
Ruling the World: When Life Gets Gamed
codingconduct
0
140
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
The Pragmatic Product Professional
lauravandoore
37
7.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Transcript
GOOGLE-AUTHENTICATOR WITH NODEJS PHILIPP DUNKEL PIPOBSCURE
PROTOCOL • T imebased • O ne • T ime
• P assword RFC 6238 - http://tools.ietf.org/html/rfc6238
PRO - CON/CAVEATS • Variable / Changing • Second Factor
• Standardised • Added Security • Shared Secret • Raw Secret Stored !
GOOGLE AUTHENTICATOR - IN THE WILD • Amazon Web Services
• Asia Nexgen • Atomic-Trade.com • App.net • Bitstamp • Bitcoin.de • Blockchain.info • BTC-e.com • CaVirtEx.com • Cex.io • CipherGraph Networks • Coinbase • Dashlane • DigitalOcean • Dreamhost • Dropbox • Drupal • Evernote • Eclipse Mining Consortium • Facebook • Gaia Online • Gandi.net • GitHub • Google Apps • Google Mail • HootSuite • Joomla • LastPass • Linode • LinOTP • LocalBitcoins • Linux • Microsoft account • Mt. Gox • Net4Game • Okcoin • Salesforce.com • Synology • SupportPoint • TACACS.net • Teamviewer • timetotrade • WordPress • Xat • XenForo ! !
GOOGLE AUTHENTICATOR APP
MODULES - OTP & QRPNG
CREATE A SECRET var OTP = require(‘otp’); function createUser(request, reply)
{ var otp = OTP({ name: request.params.username + '@demo' }); var filename = __dirname + '/data/' + request.params.username + ‘.json’; var content = JSON.stringify(otp, undefined, ' ‘); fs.writeFile(filename, content, function(err) { if (err) return reply(err); reply(otp.totpURL); }); }
TOTP - INFORMATION { "class": "OTP{@phidelta}", "name": "pipobscure@demo", "keySize": 32,
"codeLength": 6, “secret": “INJCM5ZXGEYW2QJJGN5TEW25LNAC6NLUFZYWK2CWIE2U2S3MIZIQ“, "epoch": 0, "timeSlice": 30 } otpauth://totp/pipobscure@demo?secret=INJCM5ZXGEYW2QJJGN5TEW25LNAC6NLUFZYWK2CWIE2U2S3MIZIQ
CREATE A QR-CODE otpauth://totp/pipobscure@demo?secret=INJCM5ZXGEYW2QJJGN5TEW25LNAC6NLUFZYWK2CWIE2U2S3MIZIQ var QR = require(‘qrpng’); function fetchQRCode(request,
reply) { var url = request.query.url; var scale = request.query.scale || 4; QR(url, scale, function(err, png) { if (err) return reply(err); reply(png).type('image/png'); }); }
VALIDATE A CODE function verifyCode(request, reply) { var filename =
__dirname + '/data/' + request.params.username + ‘.json'; fs.readFile(, 'utf-8', function(err, data) { if (err) return reply(err); var otp = JSON.parse(data, OTP.reviveJSON); ! if (String(otp.totp()) !== String(request.payload)) { return reply({ valid: false }).code(403); } ! reply({ valid: true }); }); }