SlideShare une entreprise Scribd logo
1  sur  52
Building a WiFi Hotspot with NodeJS
Cisco Meraki – ExCap API
Cory Guynn, Consulting Systems Engineer
DEVNET-2049
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 2DEVNET-2049
Cisco Meraki
Cloud Managed IT
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 3DEVNET-2049
Captive Portal
Splash
Branding, T&Cs, advertising, survey
Authentication
Process login
Log
Store session and form data
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 4DEVNET-2049
Meraki Splash Page Options
Branding
Survey
T&Cs
Click-through Sign-on
“Splash, agree, have a nice day” “Splash, register/login,
have a nice day”
Branding
RADIUS w/
COA
Logout
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 5DEVNET-2049
Meraki Dashboard
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 6DEVNET-2049
Access Control
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 7DEVNET-2049
Walled Garden
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 8DEVNET-2049
Custom Splash URL
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 9DEVNET-2049
NodeJS
Building the Webservice
• JavaScript with I/O
• Active developer community
• Rich library with NPM (Node Package Modules)
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 10DEVNET-2049
Install Sample App
Install NodeJS
Install MongoDB
Clone source code
git clone https://github.com/dexterlabora/excap.git
or
git clone https://github.com/dexterlabora/excap-social.git
Install dependencies (while in root of the cloned directory)
npm install
Run application
node app.js
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 11DEVNET-2049
NodeJS Required Modules
• express
• Web server framework
• express-session
• Store client session data
• mongodb
• No-SQL database
• handlebars
• HTML template framework
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 12DEVNET-2049
Web Services
Express
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000)
“Fast, unopinionated, minimalist web framework”
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 13DEVNET-2049
Web Services
app.use(require('express-session')({
secret: 'supersecret', // this secret is used to encrypt cookie
cookie: {
maxAge: 1000 * 60 * 60 * 24 // 1 day
},
store: store,
resave: true,
saveUninitialized: true
}));
Express-Session
Session data is not saved in the cookie itself, just the session ID.
Session data is stored server-side.
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 14DEVNET-2049
Web Services
var MongoDBStore = require('connect-mongodb-session')(session);
var store = new MongoDBStore({
uri: 'mongodb://localhost:27017/test',
collection: 'excap'
});
MongoDB
Store session data into a No-SQL database
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 15DEVNET-2049
Click-through
Splash Page
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 16DEVNET-2049
Click-through
Network Flow
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 17DEVNET-2049
Click-through Code Flow
App
Web Services
Routes
MongoDB
Express
[get]
/click
[post]
/login
[get]
/success
Meraki
HTML
success.
hbs
continue_url
/success
HTML
click-
through.hbs
authbase_grant_url
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 18DEVNET-2049
Click-through ExCap API
Meraki Provided Information
• base_grant_url
• https://n143.network-auth.com/splash/grant
• user_continue_url
• node_mac
• client_ip
• client_mac
• ap_name
• ap_tags
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 19DEVNET-2049
Request from Meraki via client
http://app.internetoflego.com:1880/click
?base_grant_url=https%3A%2F%2Fn143.network-auth.com%2Fsplash%2Fgrant
&user_continue_url=http%3A%2F%2Fwww.ask.com%2F
&node_id=149624927555708
&node_mac=88:15:44:a8:10:7c
&gateway_id=149624927555708
&client_ip=10.223.205.118
&client_mac=84:3a:4b:50:e2:3c
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 20DEVNET-2049
/click
// serving the static click-through HTML file
app.get('/click', function (req, res) {
// extract parameters (queries) from URL
req.session.host = req.headers.host;
req.session.base_grant_url = req.query.base_grant_url;
req.session.user_continue_url = req.query.user_continue_url;
req.session.node_mac = req.query.node_mac;
req.session.client_ip = req.query.client_ip;
req.session.client_mac = req.query.client_mac;
req.session.splashclick_time = new Date().toString();
// success page options instead of continuing on to intended url
req.session.success_url = 'http://' + req.session.host + "/success";
req.session.continue_url = req.query.user_continue_url;
// display session data for debugging purposes
console.log("Session data at click page = " + util.inspect(req.session, false, null));
// render login page using handlebars template and send in session data
res.render('click-through', req.session);
});
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 21DEVNET-2049
Click-through.hbs
{{handlebars}}
<div id="continue">
<h1>IoL Cafe</h1>
<p>Please enjoy our complimentary WiFi and a cup of joe.</p>
<p>
Brought to you by <a href="http://www.internetoflego.com" target="blank">InternetOfLego.com</a>
</p>
<form action="/login" method="post" class="form col-md-12 center-block">
<div class="form-group">
<input class="form-control input-lg" placeholder="Email" type="text" name="form1[email]" required>
</div>
<div class="form-group">
<button class="btn btn-primary btn-lg btn-block">Sign In</button>
<span class="pull-left"><a href="#">Terms and Conditions</a></span>
</div>
</form>
</div>
</div>
<div class="footer">
<p>Your IP: {{client_ip}}</p>
<p>Your MAC: {{client_mac}}</p>
<p>AP MAC: {{node_mac}}</p>
<h3>POWERED BY</h3>
<img class="text-center" src="/img/cisco-meraki-gray.png" style="width:10%; margin:10px;">
</div>
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 22DEVNET-2049
Process Login
// handle form submit button and send data to Cisco Meraki - Click-through
app.post('/login', function(req, res){
// save data from HTML form
req.session.form = req.body.form1;
req.session.splashlogin_time = new Date().toString();
// forward request onto Cisco Meraki to grant access
// *** Send user to success page : success_url
res.writeHead(302, {
'Location': req.session.base_grant_url + "? continue_url="+req.session.success_url
});
res.end();
});
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 23DEVNET-2049
Success!
Session Log Data
excap-1 Session data at login page = { cookie:
excap-1 { path: '/',
excap-1 _expires: Mon Dec 07 2015 02:11:55 GMT+0000 (UTC),
excap-1 originalMaxAge: 604800000,
excap-1 httpOnly: true,
excap-1 secure: null,
excap-1 domain: null },
excap-1 host: ’127.0.0.1:8181',
excap-1 base_grant_url: 'https://n143.network-auth.com/splash/grant',
excap-1 user_continue_url: 'http://www.google.com/',
excap-1 node_mac: '00:18:0a:13:dd:b0',
excap-1 client_ip: '10.173.154.6',
excap-1 client_mac: 'f8:95:c7:ff:86:27',
excap-1 splashclick_time: 'Mon Nov 30 2015 02:11:54 GMT+0000 (UTC)',
excap-1 _locals: {},
excap-1 form: { email: 'guest@meraki.com' },
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 25DEVNET-2049
Click-through
w/Social Login
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 26DEVNET-2049
Code Overview
Click-through with Social OAuth
App
Web
Services
Routes
MongoDB
Express
[get]
/click
[get]
/auth/google
[get]
/success
Meraki
HTML
success
.hbs continue_url
/success
HTML
click-
through.hbs
auth
[get]
/auth/wifi
passport strategy
Social OAuth
success callback
/auth/wifi
OAuth
base_grant_url
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 27DEVNET-2049
OAuth
“Simple, unobtrusive authentication for Node.js"
Passport is authentication middleware for Node.js. Extremely flexible and modular,
Passport can be unobtrusively dropped in to any Express-based web application. A
comprehensive set of strategies support authentication using a username and
password, Facebook, Twitter, and more.
http://passportjs.org/
Passport
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 28DEVNET-2049
click-through.hbs
<div>
<h3>Login Options</h3>
<a href="/auth/signup" class="btn btn-default"><span class="fa fa-user"></span> Email</a>
<a href="/auth/facebook" class="btn btn-primary"><span class="fa fa-facebook"></span>
Facebook</a>
<a href="/auth/twitter" class="btn btn-info"><span class="fa fa-twitter"></span> Twitter</a>
<a href="/auth/google" class="btn btn-danger"><span class="fa fa-google-plus"></span> Google+</a>
<a href="/auth/linkedin" class="btn btn-info"><span class="fa fa-linkedin"></span> LinkedIn</a>
</div>
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 29DEVNET-2049
/auth/google
// send to google to do the authentication
app.get('/auth/google', passport.authenticate('google'));
// the callback after google has authenticated the user
app.get('/auth/google/callback',
passport.authenticate('google', {
successRedirect : '/auth/wifi',
failureRedirect : '/auth/google'
})
);
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 30DEVNET-2049
Passport Strategy
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
passport.use(new GoogleStrategy({
clientID : configAuth.googleAuth.clientID,
clientSecret : configAuth.googleAuth.clientSecret,
callbackURL : configAuth.googleAuth.callbackURL,
scope : ['profile', 'email'],
passReqToCallback : true
},
function(req, token, refreshToken, profile, done) {
... SNIP ...
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 31DEVNET-2049
Google API
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 32DEVNET-2049
/auth/wifi
// authenticate wireless session with Cisco Meraki
app.get('/auth/wifi', function(req, res){
req.session.splashlogin_time = new Date().toString();
// debug - monitor : display all session data on console
console.log("Session data at login page = " + util.inspect(req.session, false, null));
// *** redirect user to Meraki to process authentication, then send client to success_url
res.writeHead(302, {'Location': req.session.base_grant_url +
"?continue_url="+req.session.success_url});
res.end();
});
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 33DEVNET-2049
Google Login
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 35DEVNET-2049
Sign-on
Splash Page
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 36DEVNET-2049
Sign-on
Flow
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 37DEVNET-2049
Code Overview
Sign-on
App
HTMLWeb Services
Routes
Signon.h
bs
MongoDB
Express
[get]
/signon
[get]
/success
[get]
/logout
Meraki
RADIUS
HTML
success.hbs
logout.hbs
redirect to
/success
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 38DEVNET-2049
ExCap API
Sign-on
• login_url
• https://n143.network-auth.com/splash/login?mauth=MMtoqbXZbiYvY2dkMWlEV06tIgp9mo6qkQKKcHG-
0Oj4kb2bW0Vu4dLljkScAJRft95MSEA0YFLalbkUQtkt0YuL8jr_aRKOORUrbO8r8Vwq4EyRq9kfpkP2usCJL5q
XRX7yrUCWtRyW0ryhTzs3lz6Gi2RVENFDo_vukBWh2Dcvso4AAl-mJJ2c8KaEnFlFCYS-
gPn4ZhDA8&continue_url=http%3A%2F%2Fconnectivitycheck.android.com%2Fgenerate_204
• continue_url
• node_mac
• client_ip
• client_mac
• ap_name
• ap_tags
• logout_url
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 39DEVNET-2049
/signon
app.get('/signon', function (req, res) {
// extract parameters (queries) from URL
req.session.host = req.headers.host;
req.session.login_url = req.query.login_url;
req.session.continue_url = req.query.continue_url;
req.session.ap_name = req.query.ap_name;
req.session.ap_tags = req.query.ap_tags;
req.session.client_ip = req.query.client_ip;
req.session.client_mac = req.query.client_mac;
req.session.success_url = req.protocol + "://" + req.session.host + "/success"; req.session.signon_time =
new Date();
// render login page using handlebars template and send in session data
res.render('sign-on', req.session);
});
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 40DEVNET-2049
sign-on.hbs
{{handlebars}}
<form action={{login_url}} method="post" class="form col-md-12 center-block">
<input type="hidden" name="success_url" value={{success_url}} />
<div class="form-group">
<div class="error">
{{recent_error}}
</div>
<input class="form-control input-lg" type="text" name="username" placeholder="Username or email">
<i class="icon-user icon-large"></i>
</div>
<div class="form-group">
<input class="form-control input-lg" type="password" name="password" placeholder="Password">
<i class="icon-lock icon-large"></i>
</div>
<div class="form-group">
<button class="btn btn-primary btn-lg btn-block">Sign In</button>
<span class="pull-left"><a href="#">Terms and Conditions</a></span>
... snip …
<div class="footer">
<p>Client IP: {{client_ip}}</p>
<p>Client MAC: {{client_mac}}</p>
<p>AP Tags: {{ap_tags}}</p>
<p>AP Name: {{ap_name}}</p>
<p>AP MAC: {{node_mac}}</p>
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 41DEVNET-2049
/success
app.get('/success', function (req, res) {
// extract parameters (queries) from URL
req.session.host = req.headers.host;
req.session.logout_url = req.query.logout_url + "&continue_url=" +
req.protocol + "://" + req.session.host + "/logout";
req.session.success_time = new Date();
// render sucess page using handlebars template and send in session data
res.render('success', req.session);
});
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 42DEVNET-2049
Success!
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 43DEVNET-2049
/logout
app.get('/logout', function (req, res) {
// determine session duration
req.session.loggedout_time = new Date();
req.session.duration = {};
req.session.duration.ms = Math.abs(req.session.loggedout_time - req.session.success_time) ;
req.session.duration.sec = Math.floor((req.session.duration.ms/1000) % 60);
req.session.duration.min = (req.session.duration.ms/1000/60) << 0;
// extract parameters (queries) from URL
req.session.host = req.headers.host;
req.session.logout_url = req.query.logout_url + "&continue_url=" + req.protocol + "://" + req.session.host +
"/logged-out";
// render sucess page using handlebars template and send in session data
res.render('logged-out', req.session);
});
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 44DEVNET-2049
Logged Out
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 45DEVNET-2049
Resources
Meraki Developers Portal
http://developers.meraki.com/
Cory Guynn
Twitter: @eedionysus
Email: Cory@meraki.com
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 46DEVNET-2049
Resources
• Captive Portal Solution Guide
• https://meraki.cisco.com/lib/pdf/meraki_whitepaper_captive_portal.pdf
• Write-ups and source code
• ExCap
• http://www.internetoflego.com/wifi-hotspot-cisco-meraki-excap-nodejs/
• https://github.com/dexterlabora/excap
• Node-RED version
• http://flows.nodered.org/flow/e80275ccd499c2edaf43
• ExCap-Social
• http://www.internetoflego.com/wifi-hotspot-with-social-oauth-passport-mongodb/
• https://github.com/dexterlabora/excap-social
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 47DEVNET-2049
Install Sample App
Install NodeJS
Install MongoDB
Clone source code
git clone https://github.com/dexterlabora/excap.git
or
git clone https://github.com/dexterlabora/excap-social.git
Install dependencies (while in root of the cloned directory)
npm install
Run application
node app.js
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 48DEVNET-2049
logged-out.hbs
<h1>Logged Out!</h1>
<p>
Total session duration: {{duration.min}} minutes
{{duration.sec}} seconds
</p>
</div>
</div>
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public
Complete Your Online Session Evaluation
Don’t forget: Cisco Live sessions will be available
for viewing on-demand after the event at
CiscoLive.com/Online
• Give us your feedback to be
entered into a Daily Survey
Drawing. A daily winner will
receive a $750 Amazon gift card.
• Complete your session surveys
through the Cisco Live mobile
app or from the Session Catalog
on CiscoLive.com/us.
49DEVNET-2049
© 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public
Continue Your Education
• Demos in the Cisco campus
• Walk-in Self-Paced Labs
• Lunch & Learn
• Meet the Engineer 1:1 meetings
• Related sessions
50DEVNET-2049
Thank you
Building a WiFi Hotspot with NodeJS: Cisco Meraki - ExCap API

Contenu connexe

Tendances

Introduction to SAML 2.0
Introduction to SAML 2.0Introduction to SAML 2.0
Introduction to SAML 2.0Mika Koivisto
 
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webappsMikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webappshacktivity
 
OPA: The Cloud Native Policy Engine
OPA: The Cloud Native Policy EngineOPA: The Cloud Native Policy Engine
OPA: The Cloud Native Policy EngineTorin Sandall
 
Introduction to OpenID Connect
Introduction to OpenID Connect Introduction to OpenID Connect
Introduction to OpenID Connect Nat Sakimura
 
Introduction to Modern Identity with Auth0's Developer
 Introduction to Modern Identity with Auth0's Developer Introduction to Modern Identity with Auth0's Developer
Introduction to Modern Identity with Auth0's DeveloperProduct School
 
Pentesting GraphQL Applications
Pentesting GraphQL ApplicationsPentesting GraphQL Applications
Pentesting GraphQL ApplicationsNeelu Tripathy
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with KeycloakJulien Pivotto
 
Open Policy Agent Deep Dive Seattle 2018
Open Policy Agent Deep Dive Seattle 2018Open Policy Agent Deep Dive Seattle 2018
Open Policy Agent Deep Dive Seattle 2018Torin Sandall
 
IBM: Hey FIDO, Meet Passkey!.pptx
IBM: Hey FIDO, Meet Passkey!.pptxIBM: Hey FIDO, Meet Passkey!.pptx
IBM: Hey FIDO, Meet Passkey!.pptxFIDO Alliance
 
Azure Active Directory - An Introduction
Azure Active Directory  - An IntroductionAzure Active Directory  - An Introduction
Azure Active Directory - An IntroductionVenkatesh Narayanan
 
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...DirkjanMollema
 
Overview of Data Loss Prevention Policies in Office 365
Overview of Data Loss Prevention Policies in Office 365Overview of Data Loss Prevention Policies in Office 365
Overview of Data Loss Prevention Policies in Office 365Dock 365
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - IntroductionKnoldus Inc.
 
Draft: building secure applications with keycloak (oidc/jwt)
Draft: building secure applications with keycloak (oidc/jwt)Draft: building secure applications with keycloak (oidc/jwt)
Draft: building secure applications with keycloak (oidc/jwt)Abhishek Koserwal
 
Secure your app with keycloak
Secure your app with keycloakSecure your app with keycloak
Secure your app with keycloakGuy Marom
 
Implementing WebAuthn & FAPI supports on Keycloak
Implementing WebAuthn & FAPI supports on KeycloakImplementing WebAuthn & FAPI supports on Keycloak
Implementing WebAuthn & FAPI supports on KeycloakYuichi Nakamura
 
Web application security
Web application securityWeb application security
Web application securityKapil Sharma
 

Tendances (20)

Introduction to SAML 2.0
Introduction to SAML 2.0Introduction to SAML 2.0
Introduction to SAML 2.0
 
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webappsMikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
 
#Acunetix #product #presentation
#Acunetix #product #presentation#Acunetix #product #presentation
#Acunetix #product #presentation
 
OPA: The Cloud Native Policy Engine
OPA: The Cloud Native Policy EngineOPA: The Cloud Native Policy Engine
OPA: The Cloud Native Policy Engine
 
Introduction to OpenID Connect
Introduction to OpenID Connect Introduction to OpenID Connect
Introduction to OpenID Connect
 
Introduction to Modern Identity with Auth0's Developer
 Introduction to Modern Identity with Auth0's Developer Introduction to Modern Identity with Auth0's Developer
Introduction to Modern Identity with Auth0's Developer
 
Pentesting GraphQL Applications
Pentesting GraphQL ApplicationsPentesting GraphQL Applications
Pentesting GraphQL Applications
 
SIngle Sign On with Keycloak
SIngle Sign On with KeycloakSIngle Sign On with Keycloak
SIngle Sign On with Keycloak
 
Open Policy Agent Deep Dive Seattle 2018
Open Policy Agent Deep Dive Seattle 2018Open Policy Agent Deep Dive Seattle 2018
Open Policy Agent Deep Dive Seattle 2018
 
How to Use JSON in MySQL Wrong
How to Use JSON in MySQL WrongHow to Use JSON in MySQL Wrong
How to Use JSON in MySQL Wrong
 
IBM: Hey FIDO, Meet Passkey!.pptx
IBM: Hey FIDO, Meet Passkey!.pptxIBM: Hey FIDO, Meet Passkey!.pptx
IBM: Hey FIDO, Meet Passkey!.pptx
 
Azure Active Directory - An Introduction
Azure Active Directory  - An IntroductionAzure Active Directory  - An Introduction
Azure Active Directory - An Introduction
 
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
 
Overview of Data Loss Prevention Policies in Office 365
Overview of Data Loss Prevention Policies in Office 365Overview of Data Loss Prevention Policies in Office 365
Overview of Data Loss Prevention Policies in Office 365
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - Introduction
 
Draft: building secure applications with keycloak (oidc/jwt)
Draft: building secure applications with keycloak (oidc/jwt)Draft: building secure applications with keycloak (oidc/jwt)
Draft: building secure applications with keycloak (oidc/jwt)
 
Real-world 802.1X Deployment Challenges
Real-world 802.1X Deployment ChallengesReal-world 802.1X Deployment Challenges
Real-world 802.1X Deployment Challenges
 
Secure your app with keycloak
Secure your app with keycloakSecure your app with keycloak
Secure your app with keycloak
 
Implementing WebAuthn & FAPI supports on Keycloak
Implementing WebAuthn & FAPI supports on KeycloakImplementing WebAuthn & FAPI supports on Keycloak
Implementing WebAuthn & FAPI supports on Keycloak
 
Web application security
Web application securityWeb application security
Web application security
 

En vedette

Cisco Meraki - Simplifying Powerful Technology
Cisco Meraki - Simplifying Powerful TechnologyCisco Meraki - Simplifying Powerful Technology
Cisco Meraki - Simplifying Powerful TechnologyCisco Canada
 
Meraki cloud managed products
Meraki cloud managed productsMeraki cloud managed products
Meraki cloud managed productsAtanas Gergiminov
 
Cisco Meraki Portfolio Guide
Cisco Meraki Portfolio GuideCisco Meraki Portfolio Guide
Cisco Meraki Portfolio GuideMaticmind
 
Cisco Meraki Product Launch Q1 2017
Cisco Meraki Product Launch Q1 2017Cisco Meraki Product Launch Q1 2017
Cisco Meraki Product Launch Q1 2017Maticmind
 
DEVNET-1121 Customizing Cisco Video Access for Guests
DEVNET-1121	Customizing Cisco Video Access for GuestsDEVNET-1121	Customizing Cisco Video Access for Guests
DEVNET-1121 Customizing Cisco Video Access for GuestsCisco DevNet
 
Device Programmability with Cisco Plug-n-Play Solution
Device Programmability with Cisco Plug-n-Play SolutionDevice Programmability with Cisco Plug-n-Play Solution
Device Programmability with Cisco Plug-n-Play SolutionCisco DevNet
 
How to Build Advanced Voice Assistants and Chatbots
How to Build Advanced Voice Assistants and ChatbotsHow to Build Advanced Voice Assistants and Chatbots
How to Build Advanced Voice Assistants and ChatbotsCisco DevNet
 
Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)
Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)
Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)Cisco DevNet
 
Innovation at Meraki
Innovation at MerakiInnovation at Meraki
Innovation at MerakiCisco Canada
 
Meraki Company And Product Overview
Meraki Company And Product OverviewMeraki Company And Product Overview
Meraki Company And Product Overviewxanstevenson
 
Meraki Cloud Networking Workshop
Meraki Cloud Networking WorkshopMeraki Cloud Networking Workshop
Meraki Cloud Networking WorkshopCisco Canada
 
Cisco amp for meraki
Cisco amp for merakiCisco amp for meraki
Cisco amp for merakiCisco Canada
 
Meraki powered services bell
Meraki powered services   bellMeraki powered services   bell
Meraki powered services bellCisco Canada
 
Tia resume' 13'
Tia resume' 13'Tia resume' 13'
Tia resume' 13'tiarice
 
Relatoio contas sgu 2
Relatoio contas sgu 2Relatoio contas sgu 2
Relatoio contas sgu 2macoesapo
 
2015 11-13 Radboud Technology Centers DTL Partner Advisory Committee
2015 11-13 Radboud Technology Centers DTL Partner Advisory Committee2015 11-13 Radboud Technology Centers DTL Partner Advisory Committee
2015 11-13 Radboud Technology Centers DTL Partner Advisory CommitteeAlain van Gool
 
201131065 Ani Nur Inayah
201131065 Ani Nur Inayah201131065 Ani Nur Inayah
201131065 Ani Nur Inayahaniinayah
 
Archivo de Excel
Archivo de ExcelArchivo de Excel
Archivo de Exceltatyroa94
 

En vedette (20)

Cisco Meraki - Simplifying Powerful Technology
Cisco Meraki - Simplifying Powerful TechnologyCisco Meraki - Simplifying Powerful Technology
Cisco Meraki - Simplifying Powerful Technology
 
Meraki cloud managed products
Meraki cloud managed productsMeraki cloud managed products
Meraki cloud managed products
 
Cisco Meraki Portfolio Guide
Cisco Meraki Portfolio GuideCisco Meraki Portfolio Guide
Cisco Meraki Portfolio Guide
 
Cisco Meraki Product Launch Q1 2017
Cisco Meraki Product Launch Q1 2017Cisco Meraki Product Launch Q1 2017
Cisco Meraki Product Launch Q1 2017
 
DEVNET-1121 Customizing Cisco Video Access for Guests
DEVNET-1121	Customizing Cisco Video Access for GuestsDEVNET-1121	Customizing Cisco Video Access for Guests
DEVNET-1121 Customizing Cisco Video Access for Guests
 
Device Programmability with Cisco Plug-n-Play Solution
Device Programmability with Cisco Plug-n-Play SolutionDevice Programmability with Cisco Plug-n-Play Solution
Device Programmability with Cisco Plug-n-Play Solution
 
How to Build Advanced Voice Assistants and Chatbots
How to Build Advanced Voice Assistants and ChatbotsHow to Build Advanced Voice Assistants and Chatbots
How to Build Advanced Voice Assistants and Chatbots
 
Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)
Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)
Open Device Programmability: Hands-on Intro to RESTCONF (and a bit of NETCONF)
 
Innovation at Meraki
Innovation at MerakiInnovation at Meraki
Innovation at Meraki
 
Meraki Wi-Fi Statistics
Meraki Wi-Fi StatisticsMeraki Wi-Fi Statistics
Meraki Wi-Fi Statistics
 
Meraki Company And Product Overview
Meraki Company And Product OverviewMeraki Company And Product Overview
Meraki Company And Product Overview
 
Meraki Cloud Networking Workshop
Meraki Cloud Networking WorkshopMeraki Cloud Networking Workshop
Meraki Cloud Networking Workshop
 
Meraki Overview
Meraki OverviewMeraki Overview
Meraki Overview
 
Cisco amp for meraki
Cisco amp for merakiCisco amp for meraki
Cisco amp for meraki
 
Meraki powered services bell
Meraki powered services   bellMeraki powered services   bell
Meraki powered services bell
 
Tia resume' 13'
Tia resume' 13'Tia resume' 13'
Tia resume' 13'
 
Relatoio contas sgu 2
Relatoio contas sgu 2Relatoio contas sgu 2
Relatoio contas sgu 2
 
2015 11-13 Radboud Technology Centers DTL Partner Advisory Committee
2015 11-13 Radboud Technology Centers DTL Partner Advisory Committee2015 11-13 Radboud Technology Centers DTL Partner Advisory Committee
2015 11-13 Radboud Technology Centers DTL Partner Advisory Committee
 
201131065 Ani Nur Inayah
201131065 Ani Nur Inayah201131065 Ani Nur Inayah
201131065 Ani Nur Inayah
 
Archivo de Excel
Archivo de ExcelArchivo de Excel
Archivo de Excel
 

Similaire à Building a WiFi Hotspot with NodeJS: Cisco Meraki - ExCap API

Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610Cisco DevNet
 
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example Anna Klepacka
 
RoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails exampleRoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails exampleRailwaymen
 
Extending Oracle SSO
Extending Oracle SSOExtending Oracle SSO
Extending Oracle SSOkurtvm
 
Cisco Managed Private Cloud in Your Data Center: Public cloud experience on ...
Cisco Managed Private Cloud in Your Data Center:  Public cloud experience on ...Cisco Managed Private Cloud in Your Data Center:  Public cloud experience on ...
Cisco Managed Private Cloud in Your Data Center: Public cloud experience on ...Cisco DevNet
 
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...Sébastien Levert
 
Ccnp iscw lab guide
Ccnp iscw lab guideCcnp iscw lab guide
Ccnp iscw lab guideVNG
 
APIC EM APIs: a deep dive
APIC EM APIs: a deep diveAPIC EM APIs: a deep dive
APIC EM APIs: a deep diveCisco DevNet
 
Let us make clear the aws directconnect
Let us make clear the aws directconnectLet us make clear the aws directconnect
Let us make clear the aws directconnectTomoaki Hira
 
Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...
Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...
Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...Cisco Canada
 
DevSecOps: Let's Write Security Unit Tests
DevSecOps: Let's Write Security Unit TestsDevSecOps: Let's Write Security Unit Tests
DevSecOps: Let's Write Security Unit TestsPuma Security, LLC
 
Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019
Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019
Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019Cisco DevNet
 
Safari Push Notification
Safari Push NotificationSafari Push Notification
Safari Push NotificationSatyajit Dey
 
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...Sébastien Levert
 
Решение Cisco Collaboration Edge
Решение Cisco Collaboration EdgeРешение Cisco Collaboration Edge
Решение Cisco Collaboration EdgeCisco Russia
 
Cisco connect winnipeg 2018 cloud and on premises collaboration security ex...
Cisco connect winnipeg 2018   cloud and on premises collaboration security ex...Cisco connect winnipeg 2018   cloud and on premises collaboration security ex...
Cisco connect winnipeg 2018 cloud and on premises collaboration security ex...Cisco Canada
 
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...Sébastien Levert
 
Cloud and On Premises Collaboration Security Explained
Cloud and On Premises Collaboration Security ExplainedCloud and On Premises Collaboration Security Explained
Cloud and On Premises Collaboration Security ExplainedCisco Canada
 

Similaire à Building a WiFi Hotspot with NodeJS: Cisco Meraki - ExCap API (20)

Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610
 
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
 
RoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails exampleRoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails example
 
Extending Oracle SSO
Extending Oracle SSOExtending Oracle SSO
Extending Oracle SSO
 
Cisco Managed Private Cloud in Your Data Center: Public cloud experience on ...
Cisco Managed Private Cloud in Your Data Center:  Public cloud experience on ...Cisco Managed Private Cloud in Your Data Center:  Public cloud experience on ...
Cisco Managed Private Cloud in Your Data Center: Public cloud experience on ...
 
Brksec 2101 deploying web security
Brksec 2101  deploying web securityBrksec 2101  deploying web security
Brksec 2101 deploying web security
 
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
SharePoint Fest Seattle 2017 - Everything your need to know about the Microso...
 
Ccnp iscw lab guide
Ccnp iscw lab guideCcnp iscw lab guide
Ccnp iscw lab guide
 
APIC EM APIs: a deep dive
APIC EM APIs: a deep diveAPIC EM APIs: a deep dive
APIC EM APIs: a deep dive
 
Let us make clear the aws directconnect
Let us make clear the aws directconnectLet us make clear the aws directconnect
Let us make clear the aws directconnect
 
Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...
Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...
Cisco Connect Vancouver 2017 - Cloud and on premises collaboration security e...
 
DevSecOps: Let's Write Security Unit Tests
DevSecOps: Let's Write Security Unit TestsDevSecOps: Let's Write Security Unit Tests
DevSecOps: Let's Write Security Unit Tests
 
Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019
Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019
Webex APIs for Administrators - DEVNET_2610 - Cisco Live 2019
 
Safari Push Notification
Safari Push NotificationSafari Push Notification
Safari Push Notification
 
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
SharePoint Fest DC 2018 - Everything your need to know about the Microsoft Gr...
 
Решение Cisco Collaboration Edge
Решение Cisco Collaboration EdgeРешение Cisco Collaboration Edge
Решение Cisco Collaboration Edge
 
Sage 100 ERP (MAS90) Web Services Manual
Sage 100 ERP (MAS90) Web Services ManualSage 100 ERP (MAS90) Web Services Manual
Sage 100 ERP (MAS90) Web Services Manual
 
Cisco connect winnipeg 2018 cloud and on premises collaboration security ex...
Cisco connect winnipeg 2018   cloud and on premises collaboration security ex...Cisco connect winnipeg 2018   cloud and on premises collaboration security ex...
Cisco connect winnipeg 2018 cloud and on premises collaboration security ex...
 
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
SharePoint Fest DC - Everything your need to know about the Microsoft Graph a...
 
Cloud and On Premises Collaboration Security Explained
Cloud and On Premises Collaboration Security ExplainedCloud and On Premises Collaboration Security Explained
Cloud and On Premises Collaboration Security Explained
 

Plus de Cisco DevNet

How to Contribute to Ansible
How to Contribute to AnsibleHow to Contribute to Ansible
How to Contribute to AnsibleCisco DevNet
 
Rome 2017: Building advanced voice assistants and chat bots
Rome 2017: Building advanced voice assistants and chat botsRome 2017: Building advanced voice assistants and chat bots
Rome 2017: Building advanced voice assistants and chat botsCisco DevNet
 
Cisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable WebCisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable WebCisco DevNet
 
Application Visibility and Experience through Flexible Netflow
Application Visibility and Experience through Flexible NetflowApplication Visibility and Experience through Flexible Netflow
Application Visibility and Experience through Flexible NetflowCisco DevNet
 
WAN Automation Engine API Deep Dive
WAN Automation Engine API Deep DiveWAN Automation Engine API Deep Dive
WAN Automation Engine API Deep DiveCisco DevNet
 
Cisco's Open Device Programmability Strategy: Open Discussion
Cisco's Open Device Programmability Strategy: Open DiscussionCisco's Open Device Programmability Strategy: Open Discussion
Cisco's Open Device Programmability Strategy: Open DiscussionCisco DevNet
 
NETCONF & YANG Enablement of Network Devices
NETCONF & YANG Enablement of Network DevicesNETCONF & YANG Enablement of Network Devices
NETCONF & YANG Enablement of Network DevicesCisco DevNet
 
UCS Management APIs A Technical Deep Dive
UCS Management APIs A Technical Deep DiveUCS Management APIs A Technical Deep Dive
UCS Management APIs A Technical Deep DiveCisco DevNet
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOpsCisco DevNet
 
NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...
NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...
NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...Cisco DevNet
 
Getting Started: Developing Tropo Applications
Getting Started: Developing Tropo ApplicationsGetting Started: Developing Tropo Applications
Getting Started: Developing Tropo ApplicationsCisco DevNet
 
Cisco Spark & Tropo API Workshop
Cisco Spark & Tropo API WorkshopCisco Spark & Tropo API Workshop
Cisco Spark & Tropo API WorkshopCisco DevNet
 
Coding 102 REST API Basics Using Spark
Coding 102 REST API Basics Using SparkCoding 102 REST API Basics Using Spark
Coding 102 REST API Basics Using SparkCisco DevNet
 
Cisco APIs: An Interactive Assistant for the Web2Day Developer Conference
Cisco APIs: An Interactive Assistant for the Web2Day Developer ConferenceCisco APIs: An Interactive Assistant for the Web2Day Developer Conference
Cisco APIs: An Interactive Assistant for the Web2Day Developer ConferenceCisco DevNet
 
DevNet Express - Spark & Tropo API - Lisbon May 2016
DevNet Express - Spark & Tropo API - Lisbon May 2016DevNet Express - Spark & Tropo API - Lisbon May 2016
DevNet Express - Spark & Tropo API - Lisbon May 2016Cisco DevNet
 
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016Cisco DevNet
 
Choosing PaaS: Cisco and Open Source Options: an overview
Choosing PaaS:  Cisco and Open Source Options: an overviewChoosing PaaS:  Cisco and Open Source Options: an overview
Choosing PaaS: Cisco and Open Source Options: an overviewCisco DevNet
 
Doing Business with Tropo
Doing Business with TropoDoing Business with Tropo
Doing Business with TropoCisco DevNet
 
Introduction to the DevNet Sandbox and IVT
Introduction to the DevNet Sandbox and IVTIntroduction to the DevNet Sandbox and IVT
Introduction to the DevNet Sandbox and IVTCisco DevNet
 
Introduction to Fog
Introduction to FogIntroduction to Fog
Introduction to FogCisco DevNet
 

Plus de Cisco DevNet (20)

How to Contribute to Ansible
How to Contribute to AnsibleHow to Contribute to Ansible
How to Contribute to Ansible
 
Rome 2017: Building advanced voice assistants and chat bots
Rome 2017: Building advanced voice assistants and chat botsRome 2017: Building advanced voice assistants and chat bots
Rome 2017: Building advanced voice assistants and chat bots
 
Cisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable WebCisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable Web
 
Application Visibility and Experience through Flexible Netflow
Application Visibility and Experience through Flexible NetflowApplication Visibility and Experience through Flexible Netflow
Application Visibility and Experience through Flexible Netflow
 
WAN Automation Engine API Deep Dive
WAN Automation Engine API Deep DiveWAN Automation Engine API Deep Dive
WAN Automation Engine API Deep Dive
 
Cisco's Open Device Programmability Strategy: Open Discussion
Cisco's Open Device Programmability Strategy: Open DiscussionCisco's Open Device Programmability Strategy: Open Discussion
Cisco's Open Device Programmability Strategy: Open Discussion
 
NETCONF & YANG Enablement of Network Devices
NETCONF & YANG Enablement of Network DevicesNETCONF & YANG Enablement of Network Devices
NETCONF & YANG Enablement of Network Devices
 
UCS Management APIs A Technical Deep Dive
UCS Management APIs A Technical Deep DiveUCS Management APIs A Technical Deep Dive
UCS Management APIs A Technical Deep Dive
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOps
 
NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...
NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...
NetDevOps for the Network Dude: How to get started with API's, Ansible and Py...
 
Getting Started: Developing Tropo Applications
Getting Started: Developing Tropo ApplicationsGetting Started: Developing Tropo Applications
Getting Started: Developing Tropo Applications
 
Cisco Spark & Tropo API Workshop
Cisco Spark & Tropo API WorkshopCisco Spark & Tropo API Workshop
Cisco Spark & Tropo API Workshop
 
Coding 102 REST API Basics Using Spark
Coding 102 REST API Basics Using SparkCoding 102 REST API Basics Using Spark
Coding 102 REST API Basics Using Spark
 
Cisco APIs: An Interactive Assistant for the Web2Day Developer Conference
Cisco APIs: An Interactive Assistant for the Web2Day Developer ConferenceCisco APIs: An Interactive Assistant for the Web2Day Developer Conference
Cisco APIs: An Interactive Assistant for the Web2Day Developer Conference
 
DevNet Express - Spark & Tropo API - Lisbon May 2016
DevNet Express - Spark & Tropo API - Lisbon May 2016DevNet Express - Spark & Tropo API - Lisbon May 2016
DevNet Express - Spark & Tropo API - Lisbon May 2016
 
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
 
Choosing PaaS: Cisco and Open Source Options: an overview
Choosing PaaS:  Cisco and Open Source Options: an overviewChoosing PaaS:  Cisco and Open Source Options: an overview
Choosing PaaS: Cisco and Open Source Options: an overview
 
Doing Business with Tropo
Doing Business with TropoDoing Business with Tropo
Doing Business with Tropo
 
Introduction to the DevNet Sandbox and IVT
Introduction to the DevNet Sandbox and IVTIntroduction to the DevNet Sandbox and IVT
Introduction to the DevNet Sandbox and IVT
 
Introduction to Fog
Introduction to FogIntroduction to Fog
Introduction to Fog
 

Dernier

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 

Dernier (20)

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

Building a WiFi Hotspot with NodeJS: Cisco Meraki - ExCap API

  • 1. Building a WiFi Hotspot with NodeJS Cisco Meraki – ExCap API Cory Guynn, Consulting Systems Engineer DEVNET-2049
  • 2. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 2DEVNET-2049 Cisco Meraki Cloud Managed IT
  • 3. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 3DEVNET-2049 Captive Portal Splash Branding, T&Cs, advertising, survey Authentication Process login Log Store session and form data
  • 4. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 4DEVNET-2049 Meraki Splash Page Options Branding Survey T&Cs Click-through Sign-on “Splash, agree, have a nice day” “Splash, register/login, have a nice day” Branding RADIUS w/ COA Logout
  • 5. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 5DEVNET-2049 Meraki Dashboard
  • 6. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 6DEVNET-2049 Access Control
  • 7. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 7DEVNET-2049 Walled Garden
  • 8. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 8DEVNET-2049 Custom Splash URL
  • 9. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 9DEVNET-2049 NodeJS Building the Webservice • JavaScript with I/O • Active developer community • Rich library with NPM (Node Package Modules)
  • 10. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 10DEVNET-2049 Install Sample App Install NodeJS Install MongoDB Clone source code git clone https://github.com/dexterlabora/excap.git or git clone https://github.com/dexterlabora/excap-social.git Install dependencies (while in root of the cloned directory) npm install Run application node app.js
  • 11. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 11DEVNET-2049 NodeJS Required Modules • express • Web server framework • express-session • Store client session data • mongodb • No-SQL database • handlebars • HTML template framework
  • 12. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 12DEVNET-2049 Web Services Express var express = require('express') var app = express() app.get('/', function (req, res) { res.send('Hello World') }) app.listen(3000) “Fast, unopinionated, minimalist web framework”
  • 13. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 13DEVNET-2049 Web Services app.use(require('express-session')({ secret: 'supersecret', // this secret is used to encrypt cookie cookie: { maxAge: 1000 * 60 * 60 * 24 // 1 day }, store: store, resave: true, saveUninitialized: true })); Express-Session Session data is not saved in the cookie itself, just the session ID. Session data is stored server-side.
  • 14. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 14DEVNET-2049 Web Services var MongoDBStore = require('connect-mongodb-session')(session); var store = new MongoDBStore({ uri: 'mongodb://localhost:27017/test', collection: 'excap' }); MongoDB Store session data into a No-SQL database
  • 15. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 15DEVNET-2049 Click-through Splash Page
  • 16. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 16DEVNET-2049 Click-through Network Flow
  • 17. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 17DEVNET-2049 Click-through Code Flow App Web Services Routes MongoDB Express [get] /click [post] /login [get] /success Meraki HTML success. hbs continue_url /success HTML click- through.hbs authbase_grant_url
  • 18. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 18DEVNET-2049 Click-through ExCap API Meraki Provided Information • base_grant_url • https://n143.network-auth.com/splash/grant • user_continue_url • node_mac • client_ip • client_mac • ap_name • ap_tags
  • 19. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 19DEVNET-2049 Request from Meraki via client http://app.internetoflego.com:1880/click ?base_grant_url=https%3A%2F%2Fn143.network-auth.com%2Fsplash%2Fgrant &user_continue_url=http%3A%2F%2Fwww.ask.com%2F &node_id=149624927555708 &node_mac=88:15:44:a8:10:7c &gateway_id=149624927555708 &client_ip=10.223.205.118 &client_mac=84:3a:4b:50:e2:3c
  • 20. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 20DEVNET-2049 /click // serving the static click-through HTML file app.get('/click', function (req, res) { // extract parameters (queries) from URL req.session.host = req.headers.host; req.session.base_grant_url = req.query.base_grant_url; req.session.user_continue_url = req.query.user_continue_url; req.session.node_mac = req.query.node_mac; req.session.client_ip = req.query.client_ip; req.session.client_mac = req.query.client_mac; req.session.splashclick_time = new Date().toString(); // success page options instead of continuing on to intended url req.session.success_url = 'http://' + req.session.host + "/success"; req.session.continue_url = req.query.user_continue_url; // display session data for debugging purposes console.log("Session data at click page = " + util.inspect(req.session, false, null)); // render login page using handlebars template and send in session data res.render('click-through', req.session); });
  • 21. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 21DEVNET-2049 Click-through.hbs {{handlebars}} <div id="continue"> <h1>IoL Cafe</h1> <p>Please enjoy our complimentary WiFi and a cup of joe.</p> <p> Brought to you by <a href="http://www.internetoflego.com" target="blank">InternetOfLego.com</a> </p> <form action="/login" method="post" class="form col-md-12 center-block"> <div class="form-group"> <input class="form-control input-lg" placeholder="Email" type="text" name="form1[email]" required> </div> <div class="form-group"> <button class="btn btn-primary btn-lg btn-block">Sign In</button> <span class="pull-left"><a href="#">Terms and Conditions</a></span> </div> </form> </div> </div> <div class="footer"> <p>Your IP: {{client_ip}}</p> <p>Your MAC: {{client_mac}}</p> <p>AP MAC: {{node_mac}}</p> <h3>POWERED BY</h3> <img class="text-center" src="/img/cisco-meraki-gray.png" style="width:10%; margin:10px;"> </div>
  • 22. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 22DEVNET-2049 Process Login // handle form submit button and send data to Cisco Meraki - Click-through app.post('/login', function(req, res){ // save data from HTML form req.session.form = req.body.form1; req.session.splashlogin_time = new Date().toString(); // forward request onto Cisco Meraki to grant access // *** Send user to success page : success_url res.writeHead(302, { 'Location': req.session.base_grant_url + "? continue_url="+req.session.success_url }); res.end(); });
  • 23. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 23DEVNET-2049 Success! Session Log Data excap-1 Session data at login page = { cookie: excap-1 { path: '/', excap-1 _expires: Mon Dec 07 2015 02:11:55 GMT+0000 (UTC), excap-1 originalMaxAge: 604800000, excap-1 httpOnly: true, excap-1 secure: null, excap-1 domain: null }, excap-1 host: ’127.0.0.1:8181', excap-1 base_grant_url: 'https://n143.network-auth.com/splash/grant', excap-1 user_continue_url: 'http://www.google.com/', excap-1 node_mac: '00:18:0a:13:dd:b0', excap-1 client_ip: '10.173.154.6', excap-1 client_mac: 'f8:95:c7:ff:86:27', excap-1 splashclick_time: 'Mon Nov 30 2015 02:11:54 GMT+0000 (UTC)', excap-1 _locals: {}, excap-1 form: { email: 'guest@meraki.com' },
  • 24.
  • 25. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 25DEVNET-2049 Click-through w/Social Login
  • 26. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 26DEVNET-2049 Code Overview Click-through with Social OAuth App Web Services Routes MongoDB Express [get] /click [get] /auth/google [get] /success Meraki HTML success .hbs continue_url /success HTML click- through.hbs auth [get] /auth/wifi passport strategy Social OAuth success callback /auth/wifi OAuth base_grant_url
  • 27. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 27DEVNET-2049 OAuth “Simple, unobtrusive authentication for Node.js" Passport is authentication middleware for Node.js. Extremely flexible and modular, Passport can be unobtrusively dropped in to any Express-based web application. A comprehensive set of strategies support authentication using a username and password, Facebook, Twitter, and more. http://passportjs.org/ Passport
  • 28. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 28DEVNET-2049 click-through.hbs <div> <h3>Login Options</h3> <a href="/auth/signup" class="btn btn-default"><span class="fa fa-user"></span> Email</a> <a href="/auth/facebook" class="btn btn-primary"><span class="fa fa-facebook"></span> Facebook</a> <a href="/auth/twitter" class="btn btn-info"><span class="fa fa-twitter"></span> Twitter</a> <a href="/auth/google" class="btn btn-danger"><span class="fa fa-google-plus"></span> Google+</a> <a href="/auth/linkedin" class="btn btn-info"><span class="fa fa-linkedin"></span> LinkedIn</a> </div>
  • 29. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 29DEVNET-2049 /auth/google // send to google to do the authentication app.get('/auth/google', passport.authenticate('google')); // the callback after google has authenticated the user app.get('/auth/google/callback', passport.authenticate('google', { successRedirect : '/auth/wifi', failureRedirect : '/auth/google' }) );
  • 30. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 30DEVNET-2049 Passport Strategy var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy; passport.use(new GoogleStrategy({ clientID : configAuth.googleAuth.clientID, clientSecret : configAuth.googleAuth.clientSecret, callbackURL : configAuth.googleAuth.callbackURL, scope : ['profile', 'email'], passReqToCallback : true }, function(req, token, refreshToken, profile, done) { ... SNIP ...
  • 31. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 31DEVNET-2049 Google API
  • 32. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 32DEVNET-2049 /auth/wifi // authenticate wireless session with Cisco Meraki app.get('/auth/wifi', function(req, res){ req.session.splashlogin_time = new Date().toString(); // debug - monitor : display all session data on console console.log("Session data at login page = " + util.inspect(req.session, false, null)); // *** redirect user to Meraki to process authentication, then send client to success_url res.writeHead(302, {'Location': req.session.base_grant_url + "?continue_url="+req.session.success_url}); res.end(); });
  • 33. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 33DEVNET-2049 Google Login
  • 34.
  • 35. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 35DEVNET-2049 Sign-on Splash Page
  • 36. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 36DEVNET-2049 Sign-on Flow
  • 37. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 37DEVNET-2049 Code Overview Sign-on App HTMLWeb Services Routes Signon.h bs MongoDB Express [get] /signon [get] /success [get] /logout Meraki RADIUS HTML success.hbs logout.hbs redirect to /success
  • 38. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 38DEVNET-2049 ExCap API Sign-on • login_url • https://n143.network-auth.com/splash/login?mauth=MMtoqbXZbiYvY2dkMWlEV06tIgp9mo6qkQKKcHG- 0Oj4kb2bW0Vu4dLljkScAJRft95MSEA0YFLalbkUQtkt0YuL8jr_aRKOORUrbO8r8Vwq4EyRq9kfpkP2usCJL5q XRX7yrUCWtRyW0ryhTzs3lz6Gi2RVENFDo_vukBWh2Dcvso4AAl-mJJ2c8KaEnFlFCYS- gPn4ZhDA8&continue_url=http%3A%2F%2Fconnectivitycheck.android.com%2Fgenerate_204 • continue_url • node_mac • client_ip • client_mac • ap_name • ap_tags • logout_url
  • 39. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 39DEVNET-2049 /signon app.get('/signon', function (req, res) { // extract parameters (queries) from URL req.session.host = req.headers.host; req.session.login_url = req.query.login_url; req.session.continue_url = req.query.continue_url; req.session.ap_name = req.query.ap_name; req.session.ap_tags = req.query.ap_tags; req.session.client_ip = req.query.client_ip; req.session.client_mac = req.query.client_mac; req.session.success_url = req.protocol + "://" + req.session.host + "/success"; req.session.signon_time = new Date(); // render login page using handlebars template and send in session data res.render('sign-on', req.session); });
  • 40. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 40DEVNET-2049 sign-on.hbs {{handlebars}} <form action={{login_url}} method="post" class="form col-md-12 center-block"> <input type="hidden" name="success_url" value={{success_url}} /> <div class="form-group"> <div class="error"> {{recent_error}} </div> <input class="form-control input-lg" type="text" name="username" placeholder="Username or email"> <i class="icon-user icon-large"></i> </div> <div class="form-group"> <input class="form-control input-lg" type="password" name="password" placeholder="Password"> <i class="icon-lock icon-large"></i> </div> <div class="form-group"> <button class="btn btn-primary btn-lg btn-block">Sign In</button> <span class="pull-left"><a href="#">Terms and Conditions</a></span> ... snip … <div class="footer"> <p>Client IP: {{client_ip}}</p> <p>Client MAC: {{client_mac}}</p> <p>AP Tags: {{ap_tags}}</p> <p>AP Name: {{ap_name}}</p> <p>AP MAC: {{node_mac}}</p>
  • 41. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 41DEVNET-2049 /success app.get('/success', function (req, res) { // extract parameters (queries) from URL req.session.host = req.headers.host; req.session.logout_url = req.query.logout_url + "&continue_url=" + req.protocol + "://" + req.session.host + "/logout"; req.session.success_time = new Date(); // render sucess page using handlebars template and send in session data res.render('success', req.session); });
  • 42. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 42DEVNET-2049 Success!
  • 43. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 43DEVNET-2049 /logout app.get('/logout', function (req, res) { // determine session duration req.session.loggedout_time = new Date(); req.session.duration = {}; req.session.duration.ms = Math.abs(req.session.loggedout_time - req.session.success_time) ; req.session.duration.sec = Math.floor((req.session.duration.ms/1000) % 60); req.session.duration.min = (req.session.duration.ms/1000/60) << 0; // extract parameters (queries) from URL req.session.host = req.headers.host; req.session.logout_url = req.query.logout_url + "&continue_url=" + req.protocol + "://" + req.session.host + "/logged-out"; // render sucess page using handlebars template and send in session data res.render('logged-out', req.session); });
  • 44. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 44DEVNET-2049 Logged Out
  • 45. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 45DEVNET-2049 Resources Meraki Developers Portal http://developers.meraki.com/ Cory Guynn Twitter: @eedionysus Email: Cory@meraki.com
  • 46. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 46DEVNET-2049 Resources • Captive Portal Solution Guide • https://meraki.cisco.com/lib/pdf/meraki_whitepaper_captive_portal.pdf • Write-ups and source code • ExCap • http://www.internetoflego.com/wifi-hotspot-cisco-meraki-excap-nodejs/ • https://github.com/dexterlabora/excap • Node-RED version • http://flows.nodered.org/flow/e80275ccd499c2edaf43 • ExCap-Social • http://www.internetoflego.com/wifi-hotspot-with-social-oauth-passport-mongodb/ • https://github.com/dexterlabora/excap-social
  • 47. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 47DEVNET-2049 Install Sample App Install NodeJS Install MongoDB Clone source code git clone https://github.com/dexterlabora/excap.git or git clone https://github.com/dexterlabora/excap-social.git Install dependencies (while in root of the cloned directory) npm install Run application node app.js
  • 48. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 48DEVNET-2049 logged-out.hbs <h1>Logged Out!</h1> <p> Total session duration: {{duration.min}} minutes {{duration.sec}} seconds </p> </div> </div>
  • 49. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public Complete Your Online Session Evaluation Don’t forget: Cisco Live sessions will be available for viewing on-demand after the event at CiscoLive.com/Online • Give us your feedback to be entered into a Daily Survey Drawing. A daily winner will receive a $750 Amazon gift card. • Complete your session surveys through the Cisco Live mobile app or from the Session Catalog on CiscoLive.com/us. 49DEVNET-2049
  • 50. © 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public Continue Your Education • Demos in the Cisco campus • Walk-in Self-Paced Labs • Lunch & Learn • Meet the Engineer 1:1 meetings • Related sessions 50DEVNET-2049