Forget about this "good practice" business. Learn everything that is necessary (this site is great for clarifying your doubts), analyze the specific problem and apply the best technique for the case. Good practice is to follow cake recipe blindly, is to look for a single solution for all cases and this does not work well.
Composite keys exist because they are useful. If there is a natural key that may be suitable and if the natural key is formed by more than one column, you can use it without problem. Just make sure this key is really appropriate.
It is very common for people to think that a natural key is appropriate and not actually be. It can be great at a certain time and then prove problematic. So it's very common if you opt for a substitute key, such as ID
or something like that.
I am always parsing by default if it is possible to use a natural key. Most often the decision is that you can not.
In some cases one might think of using a compound substitute key, although some will say that it actually turns out to be natural. A key that is a ID
(which functions as a foreign key as well) plus a sequential number of the item, is a key that can be considered substitute and composed. This is common in order registrations, for example.
Connection tables are usually like this, they almost always use foreign keys related to two or more tables and together form a composite primary key. Use well in most situations. I find it very rare to need a replacement key for this, but need may occur.