Authentication and Authorization Setup with Okta

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
if you've ever had to think about third-party authentication and authorization solutions i'm sure you've already heard of octa in this video we're going to be looking at how to set up a proper flow from a single page application with react as well as having protected api routes in node and allowing the two to communicate with each other while using octa as our service provider and so let's get into it [Music] all right and a quick note is that i kind of expect you guys to have a little bit of an understanding of what authentication and authorization is before watching this tutorial but if you don't i'll put a link in the description below to the blog article that i wrote for this kind of for this video essentially where in there i also include how to walk through the steps that i will do in this video but i also include some more notes uh regarding authentication and authorization as well as the three different protocols uh oauth 2.0 open id connect and saml the first thing that we're going to do is we're going to go ahead and navigate to the octa developer portal and you can get to this by just typing in octa developer login and it should be just the first one takes it here and then just sign in with octa and so then once you get to this page i'm going to continue with github because i use my github social login for this developer account and you guys can go ahead and just create your account however you like and then once we're in here we're going to go ahead and provision both of our applications and so what we're going to do in order to do that is let me zoom in a little bit for you guys we're going to go to the left tab here and you can see applications applications and we're going to go ahead and click create app integration so the first one that we're going to create is for our single play single page react application and in order to create that what we will choose is we'll choose the open id connect and again if you're not too familiar with that there's a lot of great articles on octa as well or you can look at my blog post about it and then after that we are going to choose single page application because that is how the nature of react so i'll just do react test single page application as the integration name um right now the only grant type that i really want is the authorization code and again in my notes in my blog post i kind of go into a little bit more detail about what grants are and things like that for our redirect uris uh we do actually want to change this to localhost 3000 because that's just the default port that um react applications kind of just start on so let's just make it easy let's change it to 3000 and then i'm just going to go ahead and allow everyone in my organization to access this application and once that's created there's a couple of things here that are kind of important for us to be able to actually authenticate with octa from our application and those are kind of like the client id as well as the domain and there's some other values that i'll go into detail once we actually get into the code but before we actually do that let's go back to our applications and actually provision our api services so api services is going to act as our resource server and pretty much what we're going to want to do is we're going to create this is let's just say back in node api so this is going to reflect our api that we're then going to add some type of authorization authentication to make sure that you can only call certain routes once you actually provide the correct access token and again similar to our uh single page application we also have a couple of more things here so we have the client id the domain but we also have a secret which is important and again similar to the single page we'll get back to what these values do once we actually get into the code and we can actually go ahead and start doing that now so what i'm going to do is i'm going to open up my terminal here and right now i am in this node octa auth tutorial and this is a repo within my um within my github that you guys can also go ahead and i'll put that in the link uh in the description below but this actually does have a starter branch that you guys can go ahead and check out to follow along so i'll just go ahead and check out starter and let's see what we have in here so pretty much we just have a couple of things if i open this up real quick for you guys to see we pretty much just have some kind of uh eslint configs things like that as well as a simple index.ts so um if you're not if you're familiar with my template cli project this is the node backend kind of starter i've gone ahead and actually cleaned it up a little bit but this is pretty much what it is now and these new changes are also reflected in my template cli github repo as well um but yeah so let's get started so first thing i'm going to actually want to do is i'm going to create two different folders so right now we have the auth tutorial as the parent folder but i actually want to go ahead and create a the single page application so this is where our react application is going to live and i'm actually not going to create it like that the way that i'm going to do that is by using npx create react app and then i'll just name it spa so spa or single page application and while that's creating i'm also going to go ahead and create another server and we're going to just name this um i'll name it web server not ap i'm going to name it web server um i guess the name doesn't really matter too much and then what i'm going to do is take these files and move it to the inside of my web server folder that i just created all right and looks like our react application has finished building here so you can see here that it's gone ahead and just generated the the default create react app for us and we're going to just do a little bit of cleanup because we don't actually need all of these things so i'm going to leave the public folder there for now but pretty much what i'm going to do is i'm just going to delete uh most of these random files that we're not going to be using so i'm going to just keep the app.js and the index.js and then again make sure to remove these uh dependencies that you've kind of been installing here so for example we don't need css and then i'm also going to go ahead and let's see that should be good for now and so since we've deleted those we are going to actually switch into our single page application because we're going to be handling that first and before we start uh handling installing any library or anything like that within our sim page application i just want to quickly show you guys that on this developer octa page there's actually quite a bit of different examples and different paths uh great documentation honestly to how to set up different things so for example if you want to set up a single page application using vue or maybe you want to set up api services using go they do provide really extensive documentation and honestly following along with this when i was first learning how to do this was a great experience overall but you can see here that you can then kind of tailor it to the language that you're using so pretty much what we're going to do first is we're going to go ahead and install the sdk that we're going to need and i'm just going to kind of go ahead and go off based off my notes so we don't necessarily need to follow completely along with them but in case you guys ever get lost or you want to do it in a different way you know that those resource or resources are available for you and so now we can get started so the first thing we're going to do is we're going to go ahead and install a couple of libraries to uh in order for our single page application to work with octa and those are the octa auth js library the octa react library as well as the react router dom to allow us to kind of configure routes for our single page application so i can show you can actually limit which components are able to be or which paths users can go to based off of their authentication and once that's installed we can go ahead and start creating our different components that we're going to be using to us kind of be rendered for our different routes so the first one i'm going to create is our home component and within this component i'm going to just copy this here and pretty much what this is saying is we're going to be using the octa auth from octa react and it's just a hook that octa actually provides you that you can then access your authentication state as well as the octa auth object um that you can then pretty much have access to different types of api calls such as like sign in with redirect login and those kinds they have great documentation as to what the different methods are that are provided with this octa auth but for this page for example we're going to be doing two things one we're going to be checking if the auth state is uh if we're not authenticated then we're going to return loading authentication just in case there is like that quick first render that the authentication state isn't known yet we're going to say like okay we're loading to see if you actually are authenticated or not and then if after that pretty much what we're going to do is we're going to return a button saying login which we have to find this function up here which pretty much just says hey this login function all we're going to do is sign in with redirect and the original uri is slash profile and what this does is once the user gets authenticated we're going to be sending this original uri so that the user gets redirected to slash profile once they log in which is really cool that and you can specify this to be kind of any different page that you might want to be like if you want to go to the home page landing page uh who knows but it gives you a lot of power in that regard and then if the last case here is pretty much if you are already authenticated so let's say for example the authentication state comes back that you are authenticated on this page we're pretty much just going to display the message like hey you're already authenticated the next component that i want to create is i'm going to just go ahead and create a component called locked.js and this one's pretty much going to be pretty simple it's just going to say like hey boo i'm locked we're gonna use this to kind of show how secure route works meaning that uh users shouldn't necessarily be able to access this page unless they're authenticated um and then the last component that we're going to actually go ahead and define is we're going to go ahead and create that profile component that we're redirecting the user to after they uh log in and this one's a little bit more uh extensive and complicated so let's go over what's happening here so here you can see we're importing a couple of the react hooks so you stayed in use effect we're also importing that use octa again that we used in the home component to access the authentication state as well as the octa auth kind of api calls that we have access to then we have a couple of different things we have the user information so this user information is going to kind of give us the information about the user once they log in like what claims they have their email their id and things like that messages we're going to be using this later on once we set up our back-end api to actually be able to display messages based off of a request so we'll be able to make a request from the front end to the back end say like hey i want to get a list of messages are you authenticated yes or no if no we just don't let them do that so we're going to be using this for later but right now we're not doing anything with that we then also have this use effect hook that is going to be triggered on page render pretty much saying like hey if the authentication state is not available so it's null or undefined or the user isn't authenticated let's just set their information to null but if it is if it uh if any of these values already are present then what we want to do is we're going to use the get user function that is available to us via the get octa auth object and then pretty much set this user information using the use state hook to that information that we retrieve from octa and cool and then i've gone ahead and out already defined this call back end method that we're going to be using later on once we've actually defined the back end to just be like on a button click again just call the back end so we're going to be able to kind of pass along you can see here the authentication state has access to this access token which then can be passed to our apis to actually authenticate the request so that's pretty cool um and then just down here we have this just fetching user profile so if the user information is null meaning that it hasn't uh been fetched or that it just isn't available we just say hey we're fetching the user profile but then if it is we pretty much just kind of display a bunch of things and i got this from their example so uh i'll put a link in the description below as well to the octa examples that they have so um you can kind of follow along there if you want to see how they they do a couple more things a little bit more complicated than i am doing so um but this is just pretty much what they're doing they're just showing like hey here's the information for the user and then showing their claims the claim ids and then going through the user and getting their email and everything like that that's being displayed right here and then down here we pretty much have that next part that i keep talking about with the api call with the calling of the back end cool and so the next thing that we need to do is we actually need to go ahead and define some environment variables for our single page application because we're going to need these environment variables in order for our single page application to actually be able to authenticate with octa to say like hey you should actually allow us to get this information so what i'm going to do is i'm just going to create a env file and i'm not too worried about again you should be careful with your env files um i think this actually should be env dot local for uh react application let me see if that's the one that gets yup so dot nv.local and again be really careful with these when you go to uh push it up into a repository anything like that but since i'm only going to be doing this for uh this video and i'm going to be deleting my applications um i'm not too worried about it but so here's what happens so we need our client id that we uh will be have access to when we created the single page application uh in octa we also need access to the octa domain and then so let's go ahead and actually just grab those really quick so if i go to our front end application here single page so pretty easy let's just copy this and then i can place that here and then if i go to here go to my domain i'll paste that there there we go so we have that configured and again one of the ways to have environment variables with react applications is you have to similar to next or anything like that you have to prepend it with react app like that so be sure to remember to do that and then once we have that available to us we can actually go ahead and create the octa config and what i'm going to do is i'm going to just create a lib folder where this octa configuration is going to live and go ahead and paste it in here and so pretty much here you can see we're just getting these uh environment variables that we just defined in our env.local so the port domain client id and we're going to be using these to then kind of export this octa configuration that we're going to then wrap our application around so pretty much what this is doing is we have our client id here we have our issuer so like who is the issuer of your octa configuration and that's pretty much just our domain slash oauth default so that's what's going to issue our tokens for us we have the redirect uri so this is pretty much just makes it so like if the for example if uh if a path is secure and you're not authenticated the cool thing that this will do is it'll automatically redirect you to this call a redirect uri and try to log you in so it could be that maybe um you're authenticated but you activated a page that's not secure and things like that and so you go to uh our secure page and then it says like oh wait shoot you're actually not authenticated or maybe it's like expired or something like that it'll redirect you to this callback which then will log you in and so it's kind of like seamless you don't have to go through the process of logging in again um so then we have our scopes here we have openid profile and email and again if you're not familiar with what scopes are uh be sure to check out my posts i kind of go into detail of what these are pkce is just another protocol for uh the openid connect it just just makes it more secure and then we're just going to disable https check i don't know if this needs to be disabled or not but let's just leave it as true and with that the last thing that we need to do is actually go ahead and modify our app.js page so what we're going to do here is a couple of things one we're going to just be doing a bunch of different imports so and now we're going to be importing a couple of new things as well so the login callback is a specific component to the octa react that you can actually specify to kind of handle that uh redirect uri that i talked about so like the slash login slash uh callback we're going to actually define this slash login callback to actually show this login callback so that's pretty useful so you don't actually have to go through and define that for yourself we also have things access to things like secure route which is a component that you could uh kind of wrap or you can have routes and secure out so secure routes will check to make sure that you're actually authenticated before actually allowing you to see that um then we also have again two relative uri octa auth and these are a couple of things that we're gonna touch about while we're actually importing these but then you can see we just have the home locked profile the configuration we kind of defined this uh callback path here to just the slash login slash callback i'm doing it just hard coded right here but you could change that if you want an environment variable or something and then here we pretty much create our octa authentication so what we're doing here is we're just creating a new octa off and we're passing that configuration that we defined and that's going to give us access to this octa auth object that which we're then going to use with this security component and i haven't really dig too deep into what how this security component works but pretty much uh it allows you to wrap your application or your routes to kind of allow you to have access to this octa authentication configuration that you have created access to your octa overall so this allows our application to actually access the application here and have the be able to authenticate with it and use it the way that we're expecting that it should one thing to note is that you do need this restore original uri and pretty much what that does is like just in case something goes wrong uh make sure to go back to the original uri and then so like maybe the previous thing that you were at this is a required prop to the security component and that did take me a little bit of time to understand so just know that usually you could just leave it like this and um you could play around with it make it a little bit different if you'd like but i'm just going to leave it as kind of like with the default from their documentation um you have access to this use history hook which is pretty cool that's just a react router dom thing and then pretty much what we're doing here is a couple of things so again we wrap our routes in security meaning that we have access to our authentication from octa we have this switch which is just common react router stuff and then we have a couple of paths so we have the catch-all path of just slash which is going to take us to home we also have our callback path with again which i meant it with which i mentioned is the slash login slash callback and uh we're gonna use that login callback component that's already defined for us from octa so thanks for them for doing that and then we have two secure routes so these routes will not be accessible unless you are authenticated and down here i kind of also showed an example that their documentation has as well but i just kind of wanted to include it in the code um you can actually secure every single route on your application and you can do that pretty seamlessly so pretty much what you a lot uh you can do is you can define the overall catch-all route which is slash to be a secure route so that means any route that i later defined will actually uh be forced to be a secure route so that's really cool if you had to have like a sensitive application where every single route in your uh single page application must be sensitive and secure and so let's test and make sure that we set this all up correctly so i'm going to go ahead and start our application using just a classic yarn start which is from the what's it called the react kind of just the default create create react app scripts that they provide us and it's going to go ahead and start our application and let's see here report web vitals is not defined so it seems that i actually need to go ahead and change that and then i also do need to change this a little bit and pretty much all i did change was instead of it being the react strict mode here we're actually going to just wrap it in router so that every single uh page in our component has access to this um use history kind of hook here and things like that cool and once we have that let's go back to our application here and see what is actually happening so if i zoom in a little bit for you guys you can see here that on the kind of just a slash page we have this login button and i'm going to go ahead and close this and what i want to show you guys kind of it all happens pretty quick so once i click login you can see here that it kind of uh the urls here quickly switched so it went to slash login callback and then it kind of authenticated did all of that it had to do and then it said okay now that you've authenticated let me redirect you to the slash profile page so now you can see that it kind of gives us some information here so you can see that your id token was uh we use the pkc flow and again i got this from their um kind of their example repository for react so um it's just kind of nice to see i also went ahead and modified things a little bit i just didn't include so what i added here was uh if you don't see the sub or email that's because i personally went ahead and just added that because i didn't really want my personal uh identifi identifier for octa as well as my personal email showing up but yeah so everything else is kind of there so you can see here are the list of claims we have the name my locale my preferred username my given name all that kind of things whether my verified is true so you can see that we've authenticated successfully and if we also one cool thing that we can do is we can kind of see where octa stores this information for us and if we go to our network tools here in chrome or i use edge since i'm on windows but you can go to application here and you can kind of see what they've provided you so for example they give you three cookies once you log in so you have this like n-o-n-c-e you have this state as well as this kind of this redirect uh i think it's params yeah redirect params and it gives you a value and then you also have stuff information stored in your local storage so that's really cool so for example in our your token storage you have access to your id token as well as your access token here which you can see and you can see uh kind of what it provides so that's really cool the scopes what type it is everything like that as well as your id token so those are useful for two things id tokens will be used for authentication while your access token will be used for authorization and if you ever want to just debug without having to go and like uh kind of like log out and everything like that you could what you can actually do so like you see now that i'm authenticated it says you authenticated but you can actually go ahead and just delete this information so if i delete the local storage information it doesn't actually know who i am anymore and so it acts as if i'm not authenticated and that's really cool and so what i wanted to show you guys is this kind of like the the part that i touched on with this automatic redirect uri so now for example if i go to slash profile right which if we look at our app.js here you can see that slash profile is a secure route i shouldn't be able to access it and since i'm not authenticated if i actually manually navigate to this you can see that it actually goes to my login callback and again that happened really quick but you can see that it redirected to that login callback and tried to log me in and once it realized that it could then it's like okay you're good to go and it showed me the component all right and that's kind of all there really is to the front end part so let's now go ahead and set up our api so what i'm going to do is i'm just going to close all of these i'm going to go ahead and stop our uh single page application here i'm going to then navigate to our web server uh folder here and uh here we go so we have the web server and so what i'm going to do is i'm going to add the necessary files for our api and so what i'm going to add is we're going to be using express to kind of listen to our request so we're going to be making get request to an express server we're going to also install the dot env because we're going to be using environment variables similar to how we did in our single page application to store our application information uh i'm going to be using cores because that's just kind of a required thing in order for us to be able to communicate between uh different domains and then i also am going to install the octa jwt verifier and this library is pretty much what's going to use to authenticate or authenticate our access token that it's valid and allow access to our resources so let's go ahead and install those cool and once those have installed since i am kind of using typescript for this back-end i'm going to go ahead and add our typescript dependencies for express and course to be able to make sure that we can actually use those and that's just add types express and add typescores and then now let's go ahead and create that environment so what i'm going to do is i'm going to click on web server to make sure i'm in the correct uh folder here and then just add a dot env and then within this.env i'm going to add as you can see there's a couple more fields required for the api because it requires more information to actually be able to authenticate and authorize the access token that's being given with your octa application to make sure like hey this is actually valid let's allow you to access these resources so now that we have that what we're going to do is we're going to navigate to our uh applications page again and we're going to actually go to our backend api and let's go ahead and copy these information so i'm going to copy the client id and make sure i put it there i'm going to copy the client secret and i'll place that here as well and again i'm going to be deleting these so that's fine to show you guys um i got my octa domain here paste that there oops i accidentally copied twice uh there we go so that's a little bit different and then now you can see we have our auth server id which we want to leave as default and then we also have our audience and audience you should make sure that it's api default because that's kind of uh used to uh validate and if these kind of don't match up then you won't be actually able to authenticate your access token all right and with those values uh configured now we can actually go ahead and modify a couple of things so what i'm going to do is similar to we did i'm going to create a lib folder and within the lib folder this is where our verifier is going to live so i'm going to first create a uh file here called octa auth required.js or dot ts since we're using typescript and what this is gonna do it's pretty much a function that uh we're going to actually let me actually go ahead and also create the verifier before since this is using the verifier i want to make sure that that's all also created so a octa jwt verifier dot yes and so what this verifier is is pretty much similar to our um something oh it's just some eslint things if that's because i'm in the uh parent folder as opposed to strictly in the folder but that's okay um so yeah so pretty much what this is doing is similar to how our single page application configuration we're pretty much just getting this information here and we're kind of saying like hey the issuer for uh these access tokens should match this right so off server id as you can see is uh if you remember correctly we set it to default and that's because the issuer that we're getting from our single page application if we go to octa config you can see here issuer is also default so those need to match up so making sure like hey whoever issued this access token that i'm receiving must be the same cool and so now that we have this jwt verifier uh the octa auth required is pretty much the function that we're gonna use to actually match the authorization token and make sure that everything is okay so pretty much what we're doing here is we're importing the verifier that we just defined and then we're going to do a couple of things so one is we're going to read the authentication header so that's going to be the bearer token and you can see here we do a couple of some matching here and if it doesn't match meaning that it's not a bearer token meaning that it's a different type of authenticate authorization header we just straight up deny it because we're expecting it to be a bearer token so we'll deny it and then the next thing that we can do here is we have uh the access token which is the second part of the split string so it's better and then access token the audience here i kind of hard coded it but you could have used environment variables but yeah it should be api default and then here you can see we have this function where we have access to this verifier that we have created using this new octave verifier and that has a method called verify access token so with that method we pretty much pass in the access token as well as the audience and then what happens is if it matches and it verifies that it's okay we just return that jwt so the jwt is gonna have the information from um that access token and we'll return that in the request meaning that we'll be able to access it that way and then we just call the next function which just means like go on keep going uh keep doing what you're doing but if it fails the author uh if this verify access token actually fails what we do then is we actually just return a 401 meaning like hey you failed the verification process you're not allowed to access this and then with that we can go ahead and change our uh index.ts so if i go to index.ts and i modify this um it's pretty simple change so pretty much what we're doing here is we're just getting that octa auth required we're doing some express things so we're setting up some express we're also reading our environment variables to make sure that that we have them available to our application and then so pretty much again we have our app here that we're just creating as a express server we have uh the application port which if we go to env you can see we set to 8080 so that way our backend will be on 8080. our front end will be on 3000 and that's why we also need to do cores uh for this tutorial i'm just kind of allowing anybody to access this just for the sake of this but you would most likely want to actually define uh the correct domains to make sure that it's not free or open to the world um and then so then we defined two different uh api routes so i'm defining two different git routes one i have free which i don't actually require any authentication so anybody should be able to access or call api free without actually being authenticated so if i do that you can see here that uh it just returned these list of messages and then um if you were to call the locked route this one i can then pass in my octa auth required method here which is kind of just like a little bit of like some kind of middleware that says like okay i could see you have a request let me actually make sure that you're allowed to make this request and if it passes then it would go ahead and return a list of json to the requester and one thing that i want to show you guys is that earlier i mentioned that once you click the login button it kind of just automatically does it and the reason for that is because i was already logged into octa's website itself um but what i'm going to do is i'm going to actually go ahead and let's go ahead and clear my browsing data so this will just go ahead and actually clear everything so that i'm not locked into anything just to make sure that we're starting from scratch and then so if i go to localhost 3000 here you can see that we're not logged in right now and then if we check our cookies and everything like that they should be empty so you can see nothing here we also have no cookies so when i click login i mentioned last time that it kind of automatically did that and the reason for that is because i was automatically logged into octa but you can see here that it actually asks for my credentials and so i'm gonna go ahead and log in here and it's gonna fail because i log in with github and so since it fails i'm actually gonna go ahead and click the sign in with github and i need to post that and i'm gonna get an authentication code i need to get my phone okay and so then what i can do is let me go ahead and do a factor authenticate uh with the text that they sent me so that's five zero two two five seven cool so then i authenticate with github which then it redirects me to octa and then i'm logged in here and then you'll be able to see that our localhost 3000 now when i click login i should be able to log in with the information and then once we're on this login page here you can see now that we have the call api kind of enabled so what that what we're calling right now is we want to make sure that we're going to call this locked uh api route and see that we're actually able to do so and so when i click call api and if i get rid of that you can see that it's actually able to go ahead and call my um auth required api route and then another thing also is if i change this to free you should be able to see that if i call the api you can actually access that as well and one thing to show that you uh to you guys that the authentication authorization is actually working or as expected is that i'm actually going to move this to the home component as well so i want to show you guys that if i were to make a call to api locked without actually being authenticated it would fail and not pass so the way that i did that is i pretty much just moved some of the things from profile over to this home component so i have the call back in i have my messages and then down here i just kind of display the call api button again that then will display the messages when they are available so if i go back to our application here and i navigate to slash page here and i go ahead and delete my cookies i should no longer be authenticated so when i call call api you can see here that uh it's not able to actually access the access token because um it's we're not authenticated so the access token doesn't exist and so an easy way to fix that is that we can actually just do a quick check to make sure whether or not that access token is available and if it is then we'll use it but if not we'll just pass an empty string token and then that will fail the authorization so now if we navigate back to our page here we can press the call api button and you see that it will work because right now we have it set up to actually call the free route but if i change this to the lock throughout and i go ahead and refresh this and i call call api you can see that it'll fail and if we check our console here you can see that we're getting a 401 unauthorized meaning that the access token that we're providing it doesn't work so then if i log in and i go ahead and again so now we're logged in if we check our profile here you can see we're actually calling let's make it so we're calling locked and if we change it to that and i press call api you can see that i'm actually able to authorize correctly so we can see everything is set up correctly we have our front end able to call our backend we have the authentication authorization all working correctly so awesome and yeah that's pretty much all there is really to this tutorial i just wanted to show you guys how to quickly set up a third-party uh authentication authorization using octa um octa is a really cool tool to be able to kind of delegate the responsibility of having to deal with authentication authorization which can be pretty dangerous if trying to do it yourself so um and their documentation is great and i just kind of wanted to give you guys a quick little tutorial about this i wanted to do this first because i plan on releasing another video since i do quite a a bit with next js there is a really cool library called next auth for an xjs and i wanted to give you guys an idea of what octa was before i kind of integrate next off with octa so you can kind of combine the two and you can kind of switch it to use different providers so i kind of wanted to get uh the ball rolling which is a quick introduction of what's kind of happening behind the scenes or just how to set up a front end and a back end able to authenticate and authorize correctly and so i hope you guys enjoyed the video i hope that this was able to help you guys in some way and that if you guys did enjoy it please leave a like as well as comment and subscribe for uh more programming content and i appreciate you guys taking the time to watch this video and i hope to see you guys in the next one so thanks [Applause] [Music] you
Info
Channel: Leo Roese
Views: 1,183
Rating: 5 out of 5
Keywords: okta, okta dev, react, typescript, node, javascript, authentication, auth, authorization, cors, express, node.js
Id: FA4dGoj4UMU
Channel Id: undefined
Length: 37min 0sec (2220 seconds)
Published: Sun Sep 05 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.