Lecture 24 JSON Web Token (JWT) - Final
Lecture 24 JSON Web Token (JWT) - Final
BY:
MUHAMMAD RASHID MUKHTAR
CONTENTS
1. Introduction
2. Cookie Based Authentication
3. Token Based Authentication
4. JSON Web Token
5. When to use JWT?
6. JWT Structure
7. How JWT works?
8. JWT v/s other methods
9. Cons
10. Server Side Application
11. Client Side Application
INTRODUCTION
1. Authentication
2. Ways to authenticate
(i). Cookie based (Stateful Authentication)
(ii). Token based (Stateless Authentication)
Cookie Based Authentication
Stateful
Coupling with web framework
Cross Origin Request Sharing(CORS)
No data storage
Performance
Token Based Authentication
Stateless
CORS / Cross-Domain
Data Storage
Performance
Compact and Self Contained
Easy implementation on Mobile
➢ Data Overhead.
if (token) { module.exports = {
jwt.verify(token, config.secret, (err, decoded) => { checkToken: checkToken
}
if (err) {
return res.json({
success: false,
message: 'Token is not valid'
});
}
Middleware.js
IN ANGULAR
34 Signup, Login & Logout
Adding Signin Component
35
constructor(
private authService: AuthService,
private router: Router,
private flashMessage: FlashMessagesService
){}
ngOnInit() {
}
onLoginSubmit(){
const user = {
username: this.username,
password: this.password
}
this.authService.authenticateUser(user).subscribe(data => {
console.log(data);
});
}
}
Creating Service
37
auth.service.ts
registerUser(user){
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://localhost:8000/users/register', user, {headers: headers})
.map(res => res.json());
}
authenticateUser(username,password){
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://localhost:8000/login', username,password, {headers:
headers})
.map(res => res.json());
}
38
authenticateUser function
39
storeUserData(token, user){
localStorage.setItem('id_token', token); Localstorage saved as string
localStorage.setItem('user', JSON.stringify(user));
this.authToken = token;
this.user = user;
}
Dashboard
41
logout(){
this.authToken = null;
this.user = null; Clear the value of the login variable
localStorage.clear(); Empty local storage
}
Logout HTML
43
Logout
Navbar.component.html
<ul class="nav navbar-nav navbar-right">
<li [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}"><a
[routerLinkActive]="['active']" [routerLink]="['/login']">Login</a></li>
<li [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}"><a
[routerLinkActive]="['active']" [routerLink]="['/register']">Register</a></li>
<li><a (click)="onLogoutClick()" href="#">Logout</a></li>
</ul>
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.css']
})
export class NavbarComponent implements OnInit {
constructor(
private authService: AuthService,
private router: Router,
private flashMessage: FlashMessagesService
){}
ngOnInit() {
}
onLogoutClick(){
this.authService.logout();
this.flashMessage.show('You are logged out', {
cssClass: 'alert-success',
timeout: 3000
});
this.router.navigate(['/login']);
return false;
}
}
45 Protected Requests & Auth Guard
Protected Request
46
storeUserData(token, user){
localStorage.setItem('id_token', token);
localStorage.setItem('user', JSON.stringify(user));
this.authToken = token;
this.user = user;
}
loadToken(){
const token = localStorage.getItem('id_token');
this.authToken = token;
}
profile.component.ts
48
@Component({
selector: 'app-profile',
templateUrl: './profile.component.html',
styleUrls: ['./profile.component.css']
})
export class ProfileComponent implements OnInit {
user: Object;
constructor(
private authService: AuthService,
private router: Router
){}
ngOnInit() {
this.authService.getProfile().subscribe(profile => {
this.user = profile.user;
},
err => {
console.log(err);
return false;
});
}
}
Profile
49
Profile.component.html
<div *ngIf="user">
<h2 class="page-header">{{user.name}}</h2>
<ul class="list-group">
<li class="list-group-item">Username: {{user.username}}</li>
<li class="list-group-item">Email: {{user.email}}</li>
</ul>
</div>
Thank you!