All language subtitles for 005 How Authentication with JWT Works_Downloadly.ir_en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:00,930 --> 00:00:03,210 So we have our user model set up 2 00:00:03,210 --> 00:00:06,440 ready to save users with secure passwords. 3 00:00:06,440 --> 00:00:08,850 And so next up, we're gonna really implement 4 00:00:08,850 --> 00:00:11,670 user authentication and authorization. 5 00:00:11,670 --> 00:00:14,230 So in simple terms, the whole work flow 6 00:00:14,230 --> 00:00:16,530 of logging users in and allowing them 7 00:00:16,530 --> 00:00:19,360 to interact with certain protected resources 8 00:00:19,360 --> 00:00:22,163 that non-logged in users cannot access. 9 00:00:23,100 --> 00:00:26,050 Now there are many authentication methods out there, 10 00:00:26,050 --> 00:00:29,360 but the one we're gonna use is a very modern, simple 11 00:00:29,360 --> 00:00:34,360 and secure approach called Json Web Tokens or JWT for short. 12 00:00:35,170 --> 00:00:38,100 So Json Web Tokens are a stateless solution 13 00:00:38,100 --> 00:00:39,500 for authentication. 14 00:00:39,500 --> 00:00:43,410 So there is no need to store any session state on the server 15 00:00:43,410 --> 00:00:47,360 which of course is perfect for restful APIs like the one 16 00:00:47,360 --> 00:00:48,580 that we're building. 17 00:00:48,580 --> 00:00:53,080 Because remember, restful APIs should always be stateless. 18 00:00:53,080 --> 00:00:56,300 And the most widely used alternative to authentication 19 00:00:56,300 --> 00:01:00,240 with JWTs is to just store the user's log-in state 20 00:01:00,240 --> 00:01:02,420 on the server using sessions. 21 00:01:02,420 --> 00:01:05,150 But then of course does not follow the principle 22 00:01:05,150 --> 00:01:08,700 that says that restful APIs should be stateless 23 00:01:08,700 --> 00:01:12,293 and that's why we're opting for a solution like JWTs. 24 00:01:13,130 --> 00:01:15,960 So now let's take a look at how authentication 25 00:01:15,960 --> 00:01:18,660 actually works with Json Web Tokens. 26 00:01:18,660 --> 00:01:21,600 And assuming we already have a registered user 27 00:01:21,600 --> 00:01:25,380 in our database, this is how a user logs into the app. 28 00:01:25,380 --> 00:01:28,700 So the user's client starts by making a post request 29 00:01:28,700 --> 00:01:32,330 with the username or email and the password. 30 00:01:32,330 --> 00:01:35,400 The application then checks if the user exists 31 00:01:35,400 --> 00:01:37,430 and if the password is correct. 32 00:01:37,430 --> 00:01:40,340 And if so, a unique Json Web Token for only 33 00:01:40,340 --> 00:01:44,010 that user is created using a secret string 34 00:01:44,010 --> 00:01:46,290 that is stored on a server. 35 00:01:46,290 --> 00:01:49,410 And a JWT itself is really just a string 36 00:01:49,410 --> 00:01:51,150 that looks something like this. 37 00:01:51,150 --> 00:01:54,170 But we're gonna talk more about the JWT itself 38 00:01:54,170 --> 00:01:55,770 in the next slide. 39 00:01:55,770 --> 00:02:00,440 Anyway, the server then sends that JWT back to the client 40 00:02:00,440 --> 00:02:04,160 which will store it either in a cookie or in local storage. 41 00:02:04,160 --> 00:02:06,930 And just like this the user is authenticated 42 00:02:06,930 --> 00:02:09,570 and basically logged into our application 43 00:02:09,570 --> 00:02:12,720 without leaving any state on the server. 44 00:02:12,720 --> 00:02:16,310 So the server does in fact not know which users 45 00:02:16,310 --> 00:02:17,930 are actually logged in. 46 00:02:17,930 --> 00:02:20,960 But of course, the user knows that he's logged in 47 00:02:20,960 --> 00:02:25,040 because he has a valid Json Web Token which is a bit like 48 00:02:25,040 --> 00:02:29,270 a passport to access protected parts of the application. 49 00:02:29,270 --> 00:02:32,470 So again, just to make sure you got the idea. 50 00:02:32,470 --> 00:02:35,330 A user is logged in as soon as he get back 51 00:02:35,330 --> 00:02:39,720 his unique valid Json Web Token which is not saved anywhere 52 00:02:39,720 --> 00:02:41,030 on the server. 53 00:02:41,030 --> 00:02:44,840 And so this process is therefore completely stateless. 54 00:02:44,840 --> 00:02:49,300 Then, each time a user wants to access a protected route, 55 00:02:49,300 --> 00:02:51,940 like his user profile data, for example, 56 00:02:51,940 --> 00:02:55,360 he sends his Json Web Token along with a request. 57 00:02:55,360 --> 00:02:58,480 So it's a bit like showing his passport to get access 58 00:02:58,480 --> 00:03:00,450 to that route, right? 59 00:03:00,450 --> 00:03:03,870 And that's probably the best and easiest way to understand 60 00:03:03,870 --> 00:03:05,320 this whole idea. 61 00:03:05,320 --> 00:03:07,910 Now once the request hits the server, 62 00:03:07,910 --> 00:03:11,140 our app will then verify if the Json Web Token 63 00:03:11,140 --> 00:03:12,580 is actually valid. 64 00:03:12,580 --> 00:03:15,760 So if the user is really who he says he is. 65 00:03:15,760 --> 00:03:17,710 And more about how this step works 66 00:03:17,710 --> 00:03:19,660 a bit later in this video. 67 00:03:19,660 --> 00:03:22,710 Now if the token is actually valid, well, 68 00:03:22,710 --> 00:03:26,210 then the requested data will be sent to the client 69 00:03:26,210 --> 00:03:29,400 and if not, then there will be an error telling the user 70 00:03:29,400 --> 00:03:32,600 that he's not allowed to access that resource. 71 00:03:32,600 --> 00:03:34,880 And as long as the user is logged in, 72 00:03:34,880 --> 00:03:38,230 this is how it's gonna work each time that he requests data 73 00:03:38,230 --> 00:03:39,843 from any protected route. 74 00:03:40,840 --> 00:03:43,000 Now what's very important to note here 75 00:03:43,000 --> 00:03:47,570 is that all this communication must happen over https. 76 00:03:47,570 --> 00:03:51,510 So secure encrypted http in order to prevent 77 00:03:51,510 --> 00:03:55,840 that anyone can get access to passwords or Json Web Tokens. 78 00:03:55,840 --> 00:03:59,090 Only then we have a really secure system. 79 00:03:59,090 --> 00:04:02,430 But we will talk about that later in the section, okay. 80 00:04:02,430 --> 00:04:05,120 So I know that this can look quite confusing 81 00:04:05,120 --> 00:04:06,900 in the beginning when you first try 82 00:04:06,900 --> 00:04:09,120 to wrap your head around it, but actually 83 00:04:09,120 --> 00:04:13,490 the principle itself is actually quite simple, all right? 84 00:04:13,490 --> 00:04:15,830 And this is really all you need to know in order 85 00:04:15,830 --> 00:04:20,370 to be able to implement authentication using JWT. 86 00:04:20,370 --> 00:04:22,740 But let's now dive a little bit deeper into how 87 00:04:22,740 --> 00:04:25,880 the JWT itself actually works. 88 00:04:25,880 --> 00:04:30,310 So a Json Web Token looks like left part of this screenshot 89 00:04:30,310 --> 00:04:35,310 which was taken from the JWT debugger at jwt.io. 90 00:04:35,940 --> 00:04:38,650 So essentially, it's an encoding string 91 00:04:38,650 --> 00:04:40,430 made up of three parts. 92 00:04:40,430 --> 00:04:44,140 The header, the payload and the signature. 93 00:04:44,140 --> 00:04:47,910 Now the header is just some metadata about the token itself 94 00:04:47,910 --> 00:04:50,910 and the payload is the data that we can encode 95 00:04:50,910 --> 00:04:54,470 into the token, any data really that we want. 96 00:04:54,470 --> 00:04:56,690 So the more data we want to encode here, 97 00:04:56,690 --> 00:04:58,890 the bigger the JWT. 98 00:04:58,890 --> 00:05:01,750 Anyway, these two parts are just plain text 99 00:05:01,750 --> 00:05:04,860 that will get encoded, but not encrypted. 100 00:05:04,860 --> 00:05:08,790 So anyone will be able to decode them and to read them. 101 00:05:08,790 --> 00:05:11,730 So we cannot store any sensitive data in here. 102 00:05:11,730 --> 00:05:13,460 But that's not a problem at all 103 00:05:13,460 --> 00:05:16,580 because in the third part, so in the signature, 104 00:05:16,580 --> 00:05:19,370 is where things really get interesting. 105 00:05:19,370 --> 00:05:22,990 The signature is created using the header, the payload 106 00:05:22,990 --> 00:05:26,020 and the secret that is saved on the server. 107 00:05:26,020 --> 00:05:27,080 Remember that? 108 00:05:27,080 --> 00:05:28,760 And this whole process is then called 109 00:05:28,760 --> 00:05:30,883 signing the Json Web Token. 110 00:05:31,900 --> 00:05:35,590 So again, the signing algorithm takes the header, 111 00:05:35,590 --> 00:05:40,590 the payload and the secret to create a unique signature. 112 00:05:40,650 --> 00:05:43,200 So only this data plus the secret 113 00:05:43,200 --> 00:05:46,160 can create this signature, all right? 114 00:05:46,160 --> 00:05:49,200 Then together with the header and the payload, 115 00:05:49,200 --> 00:05:52,310 these signature forms the JWT, 116 00:05:52,310 --> 00:05:55,190 which then gets sent to the client. 117 00:05:55,190 --> 00:05:58,320 Now as I mentioned briefly, right in the first slide, 118 00:05:58,320 --> 00:06:02,000 once the server receives a JWT to grant access 119 00:06:02,000 --> 00:06:05,010 to a protected route, it needs to verify it 120 00:06:05,010 --> 00:06:07,730 in order to determine if the user really is 121 00:06:07,730 --> 00:06:10,120 who he claims to be, right? 122 00:06:10,120 --> 00:06:13,890 In other words, it will verify if no one changed the header 123 00:06:13,890 --> 00:06:16,580 and the payload data of the token. 124 00:06:16,580 --> 00:06:20,030 So again, this verification step will check 125 00:06:20,030 --> 00:06:23,350 if no third party actually altered either the header 126 00:06:23,350 --> 00:06:26,280 or the payload of the Json Web Token. 127 00:06:26,280 --> 00:06:29,650 So, how does this verification actually work? 128 00:06:29,650 --> 00:06:32,560 Well it is actually quite straightforward. 129 00:06:32,560 --> 00:06:35,410 So once the JWT is received, 130 00:06:35,410 --> 00:06:38,920 the verification will take it's header and payload 131 00:06:38,920 --> 00:06:41,540 and together with the secret that is still saved 132 00:06:41,540 --> 00:06:45,440 on the server, basically create a test signature. 133 00:06:45,440 --> 00:06:48,390 But the original signature that was generated 134 00:06:48,390 --> 00:06:53,390 when the JWT was first created is still in the token, right? 135 00:06:53,930 --> 00:06:56,550 And that's the key for this verification. 136 00:06:56,550 --> 00:06:59,180 Because now all we have to do is to compare 137 00:06:59,180 --> 00:07:02,590 the test signature with the original signature. 138 00:07:02,590 --> 00:07:05,050 And if the test signature is the same 139 00:07:05,050 --> 00:07:08,460 as the original signature, then it means that the payload 140 00:07:08,460 --> 00:07:11,760 and the header have not been modified, right? 141 00:07:11,760 --> 00:07:13,690 Because if they had been modified, 142 00:07:13,690 --> 00:07:16,720 then the test signature would have to be different. 143 00:07:16,720 --> 00:07:19,600 Therefore in this case where there has been no alteration 144 00:07:19,600 --> 00:07:22,990 of the data, we can then authenticate the user. 145 00:07:22,990 --> 00:07:24,940 And of course, if the two signatures 146 00:07:24,940 --> 00:07:27,520 are actually different, well, then it means 147 00:07:27,520 --> 00:07:29,870 that someone tampered with the data. 148 00:07:29,870 --> 00:07:32,780 Usually by trying to change the payload. 149 00:07:32,780 --> 00:07:35,470 But that third party manipulating the payload 150 00:07:35,470 --> 00:07:38,750 does of course not have access to the secret, 151 00:07:38,750 --> 00:07:41,370 so they cannot sign the JWT. 152 00:07:41,370 --> 00:07:44,320 So the original signature will never correspond 153 00:07:44,320 --> 00:07:46,050 to the manipulated data. 154 00:07:46,050 --> 00:07:49,160 And therefore, the verification will always fail 155 00:07:49,160 --> 00:07:50,700 in this case. 156 00:07:50,700 --> 00:07:53,850 And that's the key to making this whole system work. 157 00:07:53,850 --> 00:07:57,190 It's the magic that makes JWT so simple, 158 00:07:57,190 --> 00:07:59,790 but also extremely powerful. 159 00:07:59,790 --> 00:08:01,560 So let me summarize it again. 160 00:08:01,560 --> 00:08:04,830 Without the secret, no one will be able to manipulate 161 00:08:04,830 --> 00:08:07,920 the JWT data because they cannot create 162 00:08:07,920 --> 00:08:10,960 a valid signature for the new data. 163 00:08:10,960 --> 00:08:13,570 I mean they could manipulate the data of course, 164 00:08:13,570 --> 00:08:16,870 but it will always fail the verification step. 165 00:08:16,870 --> 00:08:19,900 Now, don't worry, we're not gonna actually implement 166 00:08:19,900 --> 00:08:22,660 these JWT algorithms by ourself. 167 00:08:22,660 --> 00:08:24,830 They are very complex and we're not gonna 168 00:08:24,830 --> 00:08:27,060 reinvent the wheel here, all right? 169 00:08:27,060 --> 00:08:29,910 But it's still very important to actually understand 170 00:08:29,910 --> 00:08:32,110 how this whole process works behind the scene. 171 00:08:32,110 --> 00:08:35,570 And I hope that this lecture did just that for you. 172 00:08:35,570 --> 00:08:38,370 But now, let's move on to the next lecture 173 00:08:38,370 --> 00:08:40,433 to actually start using all this. 14176

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.