SlideShare a Scribd company logo
How to Use Stormpath in
Angular.js
Robert Damphousse @robertjd_
Lead Front-End Developer, Stormpath
About Stormpath
• User Management API for Developers
• Password security
• Authentication and Authorization
• LDAP Cloud Sync
• Instant-on, scalable, and highly available
• Free for developers
Talk Overview
• Authentication in Single Page Apps (SPAs)
• JWTs instead of Session IDs
• Securing cookies
• Where does Stormpath fit in your architecture?
• End-to-end example with Angular.js +
Express.js
SPAs – What’s different?
• Data resources are treated differently than
application resources (HTML/CSS/JS assets
are separated from data resources)
• Forces you to build a proper API, likely a
REST + JSON API
• User Experience (UX) gets a spotlight
SPAs – What’s the same?
• Browser JavaScript is an untrusted
environment!
• Your server is responsible for resource
authentication and authorization
• You CAN use Cookies for authentication
SPAs – Authentication Strategies
• Session identifiers – opaque string in a
cookie. You CAN use this strategy
• Access Tokens are better – JWT
JSON Web Tokens (JWT)
• Used to persist authentication assertions
• Signed, structured
• Should be stored in cookies, not local
storage
JSON Web Tokens (JWT)
{
"typ":"JWT",
"alg":"HS256"
}
{
"iss": "http://trustyapp.com/”,
"exp": 1300819380,
"sub": "users/8983462",
"scope": "self api/buy"
}
tß´—™à%O˜v+nî…SZu¯µ€U…8H×
Header
Body (‘Claims’)
Cryptographic Signature
Why Cookies?
• Automatically supplied on every request
• HttpOnly flag prevents the JS environment
from accessing the cookie
• Secure flag ensures the cookie is only
transmitted over HTTPS
• Can restrict by subdomain and path
Why Not Local Storage?
• Exposed to JS environment, whereas
HttpOnly cookies are not.
• Can’t restrict visibility by path, only
subdomain
• https://www.owasp.org/index.php/HTML5_S
ecurity_Cheat_Sheet#Storage_APIs
Securing Cookies
• Use the HttpOnly and Secure flags.
• Need to protect against Cross-Site Request
Forgery (CSRF) attacks
• https://www.owasp.org/index.php/Cross-
Site_Request_Forgery_(CSRF)
Stormpath, Angular
&
Your Architecture
Your Server
Stormpath SDK
User’s Web
Browser
(SPA)
Stormpath
Angular SDK
Stormpath
HTTP API
Architecture Overview
Token Authentication
(JWT)
Stormpath API
Key Authentication
Integration Example
Express.JS Backend
End-to-End Walkthrough:
http://docs.stormpath.com/angularjs/guide/
API Documentation:
https://docs.stormpath.com/angularjs/sdk/#/api
Example Application (inside the repo):
https://github.com/stormpath/
stormpath-sdk-angularjs
Online Guide & Docs:
Server-Side:
• Create the Stormpath Middleware
• Attach the default route handlers
• Use specific middleware for API
Authentication
Stormpath, Angular & Your Architecture
Server-Side: Create the Middleware
var app = express();
var stormpathSdk = require('stormpath-sdk-express');
var spMiddleware = stormpathSdk.createMiddleware();
Server-Side: Attach default route handlers
spMiddleware.attachDefaults(app);
Server-Side: Use API Authentication
app.use('/api/*', spMiddleware.authenticate);
Client-Side:
• Add the Stormpath Angular SDK to your
Angular application
• Configure UI Router integration
• Use directives for built-in forms
• Use UI Router config for view authorization
Stormpath, Angular & Your Architecture
Client-Side: Add the SDK Dependencies
Stormpath, Angular & Your Architecture
angular.module('MyApplication', [
'ngCookies',
'ngResource',
'ngSanitize',
'ui.router',
'stormpath',
'stormpath.templates'
])
Client-Side: UI Router Integration
angular.module('MyApplication')
.config(function ($urlRouterProvider, $locationProvider) {
$urlRouterProvider.otherwise('/');
$locationProvider.html5Mode(true);
})
.run(function($stormpath){
$stormpath.uiRouter({
loginState: 'login',
defaultPostLoginState: 'main'
});
});
Client-Side: Built-in Form Directives
<div sp-login-form></div>
Client-Side: Built-in Form Directives
<div sp-registration-form post-login-state="main”></div>
Client-Side: Auth Directives
Classic Use Case: Menu bar changes when logged in
Logged In:
Not
Logged
In:
Client-Side: Auth Directives
<li if-not-user>
<a ui-sref="login">Login</a>
</li>
<li if-user>
<a ui-sref="main" sp-logout>Logout</a>
</li>
“If User” and “If Not User”
Client-Side: View Authentication
angular.module('MyApplication')
.config(function ($stateProvider) {
$stateProvider
.state('profile', {
url: '/profile',
templateUrl: 'app/profile/profile.html',
controller: 'ProfileCtrl',
sp: {
authenticate: true,
}
});
});
Client-Side: View Authorization
angular.module('MyApplication')
.config(function ($stateProvider) {
$stateProvider
.state('profile', {
url: '/profile',
templateUrl: 'app/profile/profile.html',
controller: 'ProfileCtrl',
sp: {
authorize: {
group: ‘admins’
}
}
});
});
Client-Side: Behind the Scenes..
• On login: Stormpath Express SDK sends a
JWT to Angular, stored in a secure cookie
• Browser automatically supplies JWT cookie
on all requets
• /me route is served by SDK, so that Angular
can know context about current user
Recap..
• Stormpath SDK on your server and in your SPA
• JWTs are used instead of sessions
• Angular SDK provides directives for forms and
authentication state
• Angular SDK will work with any backend
• User data is stored and secured behind the Stormpath API
Stormpath for Authentication & User Management
Stormpath can handle authentication and authorization for
your API, SPA or mobile app, as well as a range of advanced
user features
• Single Sign-On Across Your Apps
• API Authentication & Key Management
• Token Based Authentication
• Oauth Workflows
• JWTs
Implementations in your Library of choice:
https://docs.stormpath.com/home/
Get started with your free Stormpath
developer account!
https://api.stormpath.com/register
Questions?
support@stormpath.com

More Related Content

PPTX
Spring Boot Authentication...and More!
PPTX
Multi-Tenancy with Spring Boot
PPTX
Stormpath 101: Spring Boot + Spring Security
PDF
Mobile Authentication for iOS Applications - Stormpath 101
PPTX
Secure API Services in Node with Basic Auth and OAuth2
PPTX
JWTs for CSRF and Microservices
PPTX
REST API Security: OAuth 2.0, JWTs, and More!
PDF
Securing Web Applications with Token Authentication
Spring Boot Authentication...and More!
Multi-Tenancy with Spring Boot
Stormpath 101: Spring Boot + Spring Security
Mobile Authentication for iOS Applications - Stormpath 101
Secure API Services in Node with Basic Auth and OAuth2
JWTs for CSRF and Microservices
REST API Security: OAuth 2.0, JWTs, and More!
Securing Web Applications with Token Authentication

What's hot (20)

PDF
Build a REST API for your Mobile Apps using Node.js
PPTX
Instant Security & Scalable User Management with Spring Boot
PPTX
Secure Your REST API (The Right Way)
PPTX
Building a document e-signing workflow with Azure Durable Functions
PDF
SPUnite17 Who Are You and What Do You Want
PDF
Programming with Azure Active Directory
PPTX
Spring Security
PDF
O365Con18 - Introduction to Azure Web Applications - Eric Shupps
PPTX
Securing SharePoint Apps with OAuth
PDF
O365Con18 - Azure Active Directory - Sasha Kranjac & Mustafa Toroman
PDF
O365Con18 - External Collaboration with Azure B2B - Sjoukje Zaal
PDF
O365Con18 - Connect SharePoint Framework Solutions to API's secured with Azur...
PPTX
Deep thoughts from the real world of azure
PPTX
Api security
PDF
O365Con18 - Red Team vs Blue Team - Sasha Kranjac & Mustafa Toroman
PPTX
SSO IN/With Drupal and Identitiy Management
PPTX
Introduction to Azure Web Applications for Office and SharePoint Developers
PDF
CIS 2015 SSO for Mobile and Web Apps Ashish Jain
PPTX
Zero Credential Development with Managed Identities for Azure resources
PPTX
Zero credential development with managed identities
Build a REST API for your Mobile Apps using Node.js
Instant Security & Scalable User Management with Spring Boot
Secure Your REST API (The Right Way)
Building a document e-signing workflow with Azure Durable Functions
SPUnite17 Who Are You and What Do You Want
Programming with Azure Active Directory
Spring Security
O365Con18 - Introduction to Azure Web Applications - Eric Shupps
Securing SharePoint Apps with OAuth
O365Con18 - Azure Active Directory - Sasha Kranjac & Mustafa Toroman
O365Con18 - External Collaboration with Azure B2B - Sjoukje Zaal
O365Con18 - Connect SharePoint Framework Solutions to API's secured with Azur...
Deep thoughts from the real world of azure
Api security
O365Con18 - Red Team vs Blue Team - Sasha Kranjac & Mustafa Toroman
SSO IN/With Drupal and Identitiy Management
Introduction to Azure Web Applications for Office and SharePoint Developers
CIS 2015 SSO for Mobile and Web Apps Ashish Jain
Zero Credential Development with Managed Identities for Azure resources
Zero credential development with managed identities
Ad

Similar to How to Use Stormpath in angular js (20)

PPTX
JWT Authentication with AngularJS
PDF
Understanding Identity in the World of Web APIs – Ronnie Mitra, API Architec...
PDF
AppSec Tel Aviv - OWASP Top 10 For JavaScript Developers
PPTX
Build A Killer Client For Your REST+JSON API
PDF
OAuth2 and Spring Security
PDF
Building APIs in an easy way using API Platform
PPTX
Hackazon realistic e-commerce Hack platform
PPTX
Hacking mobile apps
PPTX
Single Page Applications - Where Security Goes to Die
PPTX
How to build Simple yet powerful API.pptx
PDF
Kotlin server side frameworks
PPTX
Securing RESTful APIs using OAuth 2 and OpenID Connect
PDF
OWASP SF - Reviewing Modern JavaScript Applications
PPTX
API Services: Building State-of-the-Art APIs
PDF
Pentesting RESTful WebServices v1.0
PPTX
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
PDF
ConFoo 2015 - Securing RESTful resources with OAuth2
PPTX
Spa Secure Coding Guide
PPT
UserCentric Identity based Service Invocation
PDF
JWT Authentication with AngularJS
Understanding Identity in the World of Web APIs – Ronnie Mitra, API Architec...
AppSec Tel Aviv - OWASP Top 10 For JavaScript Developers
Build A Killer Client For Your REST+JSON API
OAuth2 and Spring Security
Building APIs in an easy way using API Platform
Hackazon realistic e-commerce Hack platform
Hacking mobile apps
Single Page Applications - Where Security Goes to Die
How to build Simple yet powerful API.pptx
Kotlin server side frameworks
Securing RESTful APIs using OAuth 2 and OpenID Connect
OWASP SF - Reviewing Modern JavaScript Applications
API Services: Building State-of-the-Art APIs
Pentesting RESTful WebServices v1.0
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
ConFoo 2015 - Securing RESTful resources with OAuth2
Spa Secure Coding Guide
UserCentric Identity based Service Invocation
Ad

More from Stormpath (18)

PDF
The Ultimate Guide to Mobile API Security
PDF
Getting Started With Angular
PDF
Building Beautiful REST APIs with ASP.NET Core
PDF
JWTs in Java for CSRF and Microservices
PPTX
Beautiful REST+JSON APIs with Ion
PPTX
Storing User Files with Express, Stormpath, and Amazon S3
PPTX
Custom Data Search with Stormpath
PDF
Building Beautiful REST APIs in ASP.NET Core
PPTX
Browser Security 101
PPTX
Token Authentication in ASP.NET Core
PPTX
Token Authentication for Java Applications
PPTX
Building Secure User Interfaces With JWTs (JSON Web Tokens)
PPTX
Rest API Security
PPTX
Elegant Rest Design Webinar
PPTX
Build a Node.js Client for Your REST+JSON API
PPTX
So long scrum, hello kanban
PPTX
REST API Design for JAX-RS And Jersey
PPTX
Design Beautiful REST + JSON APIs
The Ultimate Guide to Mobile API Security
Getting Started With Angular
Building Beautiful REST APIs with ASP.NET Core
JWTs in Java for CSRF and Microservices
Beautiful REST+JSON APIs with Ion
Storing User Files with Express, Stormpath, and Amazon S3
Custom Data Search with Stormpath
Building Beautiful REST APIs in ASP.NET Core
Browser Security 101
Token Authentication in ASP.NET Core
Token Authentication for Java Applications
Building Secure User Interfaces With JWTs (JSON Web Tokens)
Rest API Security
Elegant Rest Design Webinar
Build a Node.js Client for Your REST+JSON API
So long scrum, hello kanban
REST API Design for JAX-RS And Jersey
Design Beautiful REST + JSON APIs

How to Use Stormpath in angular js

  • 1. How to Use Stormpath in Angular.js Robert Damphousse @robertjd_ Lead Front-End Developer, Stormpath
  • 2. About Stormpath • User Management API for Developers • Password security • Authentication and Authorization • LDAP Cloud Sync • Instant-on, scalable, and highly available • Free for developers
  • 3. Talk Overview • Authentication in Single Page Apps (SPAs) • JWTs instead of Session IDs • Securing cookies • Where does Stormpath fit in your architecture? • End-to-end example with Angular.js + Express.js
  • 4. SPAs – What’s different? • Data resources are treated differently than application resources (HTML/CSS/JS assets are separated from data resources) • Forces you to build a proper API, likely a REST + JSON API • User Experience (UX) gets a spotlight
  • 5. SPAs – What’s the same? • Browser JavaScript is an untrusted environment! • Your server is responsible for resource authentication and authorization • You CAN use Cookies for authentication
  • 6. SPAs – Authentication Strategies • Session identifiers – opaque string in a cookie. You CAN use this strategy • Access Tokens are better – JWT
  • 7. JSON Web Tokens (JWT) • Used to persist authentication assertions • Signed, structured • Should be stored in cookies, not local storage
  • 8. JSON Web Tokens (JWT) { "typ":"JWT", "alg":"HS256" } { "iss": "http://trustyapp.com/”, "exp": 1300819380, "sub": "users/8983462", "scope": "self api/buy" } tß´—™à%O˜v+nî…SZu¯µ€U…8H× Header Body (‘Claims’) Cryptographic Signature
  • 9. Why Cookies? • Automatically supplied on every request • HttpOnly flag prevents the JS environment from accessing the cookie • Secure flag ensures the cookie is only transmitted over HTTPS • Can restrict by subdomain and path
  • 10. Why Not Local Storage? • Exposed to JS environment, whereas HttpOnly cookies are not. • Can’t restrict visibility by path, only subdomain • https://www.owasp.org/index.php/HTML5_S ecurity_Cheat_Sheet#Storage_APIs
  • 11. Securing Cookies • Use the HttpOnly and Secure flags. • Need to protect against Cross-Site Request Forgery (CSRF) attacks • https://www.owasp.org/index.php/Cross- Site_Request_Forgery_(CSRF)
  • 13. Your Server Stormpath SDK User’s Web Browser (SPA) Stormpath Angular SDK Stormpath HTTP API Architecture Overview Token Authentication (JWT) Stormpath API Key Authentication
  • 15. End-to-End Walkthrough: http://docs.stormpath.com/angularjs/guide/ API Documentation: https://docs.stormpath.com/angularjs/sdk/#/api Example Application (inside the repo): https://github.com/stormpath/ stormpath-sdk-angularjs Online Guide & Docs:
  • 16. Server-Side: • Create the Stormpath Middleware • Attach the default route handlers • Use specific middleware for API Authentication Stormpath, Angular & Your Architecture
  • 17. Server-Side: Create the Middleware var app = express(); var stormpathSdk = require('stormpath-sdk-express'); var spMiddleware = stormpathSdk.createMiddleware();
  • 18. Server-Side: Attach default route handlers spMiddleware.attachDefaults(app);
  • 19. Server-Side: Use API Authentication app.use('/api/*', spMiddleware.authenticate);
  • 20. Client-Side: • Add the Stormpath Angular SDK to your Angular application • Configure UI Router integration • Use directives for built-in forms • Use UI Router config for view authorization Stormpath, Angular & Your Architecture
  • 21. Client-Side: Add the SDK Dependencies Stormpath, Angular & Your Architecture angular.module('MyApplication', [ 'ngCookies', 'ngResource', 'ngSanitize', 'ui.router', 'stormpath', 'stormpath.templates' ])
  • 22. Client-Side: UI Router Integration angular.module('MyApplication') .config(function ($urlRouterProvider, $locationProvider) { $urlRouterProvider.otherwise('/'); $locationProvider.html5Mode(true); }) .run(function($stormpath){ $stormpath.uiRouter({ loginState: 'login', defaultPostLoginState: 'main' }); });
  • 23. Client-Side: Built-in Form Directives <div sp-login-form></div>
  • 24. Client-Side: Built-in Form Directives <div sp-registration-form post-login-state="main”></div>
  • 25. Client-Side: Auth Directives Classic Use Case: Menu bar changes when logged in Logged In: Not Logged In:
  • 26. Client-Side: Auth Directives <li if-not-user> <a ui-sref="login">Login</a> </li> <li if-user> <a ui-sref="main" sp-logout>Logout</a> </li> “If User” and “If Not User”
  • 27. Client-Side: View Authentication angular.module('MyApplication') .config(function ($stateProvider) { $stateProvider .state('profile', { url: '/profile', templateUrl: 'app/profile/profile.html', controller: 'ProfileCtrl', sp: { authenticate: true, } }); });
  • 28. Client-Side: View Authorization angular.module('MyApplication') .config(function ($stateProvider) { $stateProvider .state('profile', { url: '/profile', templateUrl: 'app/profile/profile.html', controller: 'ProfileCtrl', sp: { authorize: { group: ‘admins’ } } }); });
  • 29. Client-Side: Behind the Scenes.. • On login: Stormpath Express SDK sends a JWT to Angular, stored in a secure cookie • Browser automatically supplies JWT cookie on all requets • /me route is served by SDK, so that Angular can know context about current user
  • 30. Recap.. • Stormpath SDK on your server and in your SPA • JWTs are used instead of sessions • Angular SDK provides directives for forms and authentication state • Angular SDK will work with any backend • User data is stored and secured behind the Stormpath API
  • 31. Stormpath for Authentication & User Management Stormpath can handle authentication and authorization for your API, SPA or mobile app, as well as a range of advanced user features • Single Sign-On Across Your Apps • API Authentication & Key Management • Token Based Authentication • Oauth Workflows • JWTs Implementations in your Library of choice: https://docs.stormpath.com/home/
  • 32. Get started with your free Stormpath developer account! https://api.stormpath.com/register Questions? support@stormpath.com