I have an ASP.NET Core API as back-end for an Angular SPA front-end. I am using Cognito as an Identity provider and want to create an OpenId-Connect authentication using authorization code flow
which would mean that all the secret credentials will be stored in back-end.
The authorization flow should be like this (standard OpenID Connect flow):
- FE application calls
/authorize
endpoint and is redirected toCognito
hosted UI. - After entering credentials FE receives an authorization code.
- FE calls BE with authorization code.
- BE calls
/token
endpoint and receivesaccessToken
andrefreshToken
. - BE Returns
accessToken
to FE and setsrefreshToken
ashttpOnly
cookie(for this not sure, I may store it in Redis cache).
Then, FE with each request will add Bearer AccessToken
to authenticate. When AccessToken
is close to expiration, it will be updated using refreshToken
.
I was experimenting with this example but here application used an Asp.Net Core cookie for authentication and ignored accessToken
and refreshToken
. I was authenticated even after accessToken
was expired. Also, there's not much documentation on how ASP.NET cookie works.
So, now I am thinking about having my custom BE endpoints and use IdentityModel helper methods but not sure if it is a good practice to handle authentication like this.
/Login
- getsAccessToken
andRefreshToken
/Refresh
- updatesAccessToken
usingRefreshToken
. FE will call it manually whenaccessToken
will be close to expiration.
So, is there a "recommended" way to handle this scenario nicely with IdentityModel
without writing custom implementation?
Also, as far as I know, it is quite common to store refreshToken
in httpOnly
cookie which will be added to each request sent to BE but then I don't see the point of having an accessToken
when I already have refreshToken
added with each request.
Isn't it better to store refreshToken
inside BE for performance and security reasons?
Authentication is a part of every application so I believe there should be some in-built framework functionality for authorization code flow
as well.