The problem is not specific to ASP.NET Core, but the solution might be.
What solution is appropriate for your setup depends on how your application uses OAuth/OIC. Let's think about it for a second:
Lets say the client sends a bearer token with every request to your backend, and your backend uses the bearer token to perform actions on behalf of the user. Assuming that each node is stateless and uses the same database cluster, then you don't need to do anything at all because there is no cached state that needs to be shared between each application node.
However, if your application backend exchanges a client's authorization code for an access token and stores that access token in the user session on the server side, you need to replicate the user session among your application nodes. Tomcat has a guide on
session replication. More hackery might be needed if each of your application nodes is seen as a separate entity by the authorization server.
As for caching, I'm not sure whether Java application containers provide built-in support for cache replication, but at least a quick Google search for "kubernetes tomcat cache" seems to come up with at least one third-party solution to this problem.
At any rate, my advice is to consider this as two separate problems:
1) What OAuth flow / grant type do you want to use, and how do you want to store the tokens associated with the user session?
2) How to replicate in-memory application state across application nodes?