Converting my comment to an answer:
Usually, the server would track a unique ID number for each object. (Maybe sequentially assigned, maybe generated hashes / GUIDs).
When a player joins the game, the server would say "here are all the objects you can see, and their ID numbers".
From that point onward, both the server and player client have a unique ID number for each object that matches its counterpart on the other end of the network connection. Each side stores those IDs locally with their copy of the object, so they don't need a special algorithm to re-generate it or look it up.
If either side changes something about the object, they tell each other "I've just changed object #xxxx in this way...", so the recipient can unambiguously identify the corresponding object in their own copy of the scene and update it to match. (And, for the server, relay that change to all other clients who should see it). Rotation doesn't need to be handled in any particularly special way.
If a new object gets created through a server-side or player action, the client gets a unique ID for it from the server as part of the reply to their creation action. The same goas for if the player moves around and encounters new objects that weren't visible from their initial spawn location: in response to the "move" action, the server replies "here are the new objects you can see from there, and their unique IDs".
That fundamental idea should be enough to handle most cases of object identity and replication/synchronization over a network. If you have a special circumstance in your game that makes this more complicated, you can post a new question describing that complication in detail, an users here can suggest ways to handle it.