A User object you're talking about has multiple Identities, which all can have multiple Claims.
One way to add custom claims to the User object is to edit the Identity that is automatically created by your authentication/authorization framework of choice (e.g. OAuth) and that step is specific to each framework, obviously. It boils down to read the docs for that framework to figure out at which point an Identity is being created and extened that point with your custom code adding new claims.
Another, maybe simpler, way is to create a new Identity object (which holds all your additional Claims) and add it to the User list of identities, using AddIdentity() method.
When you access User.Claims
that enumeration will return all the claims from all the identities you have on the User object.
So, wherever you're in your application code (the most suitable point would be a sort of a middleware, I suppose) you can do something like this:
var myIdentity = new ClaimsIdentity(new []
{
new Claim("claim type", "claim value"),
new Claim("claim type", "claim value"),
new Claim("claim type", "claim value"),
});
context.User.AddIdentity(myIdentity);
From that point on, each call to User.Claims
will return all the original claims on the User object plus your additional claims.