It is OK to add a surrogate "ID" column, as long as you also create a UNIQUE constraint on (A,B) as you did above. There are pros and cons:
Pros:
1) Shorter foreign key for child tables
2) Simpler join conditions to child tables
3) The "natural key" (A,B) can be updated without having to cascade the update to the child tables.
Cons:
1) Additional, meaningless column in table
2) In child tables, the foreign key cannot be understood by a user unless you join to the parent table to get (A,B)
My preference would be to use the natural key, but only if it is not excessively long and will never be updated.
Some people use surrogates in every table they ever create; I would not do that. For example, suppose we have tables Employee (emp_id PK) and Department (dept_id PK) and there is an intersection table Employee_Department( emp_id, dept_id, start_date, end_date ). I would make the PK for this as e.g. (emp_id, dept_id, start_date) - I would not add a surrogate like "emp_dept_id".
Of course, emp_id in this example probably is a surrogate key, because people are notoriously difficult to uniquely identify without one (2 people can have exact same name, date of birth, etc.).