In order to manage authentication in a microservices architecture, you must have a different point of view.
Remember when you worked on a monolith, you had a single authentication process.
As an example in PHP app, you find your user in a database with it's corresponding credentials, then you created a session a the user is "authenticated".
With microservices, the workflow is kinda the same. The only thing that changes now is that you are not able to open a session in different services. Furthermore, you don't need to get the authenticated user. You only need to be sure that he is authorized to perform the current call on your microservices.
Thanks to oauth2, having a valid access_token gives you this information.
This should answer the frontend part. In the backend part (I mean behind the api gateway), you should not manage access_token because it is not relevant to microservices. You can use a functional key to find any information relevant to the user inside microservices like a uuid for example.
In order to get a uuid while using oauth2 I suggest to use openid connect too. It is user with this protocol to manage specific user information and it gives you access to a specific endpoint "/userinfo".
Hope this schema will make this answer clearer.
