The service level itself is not an anti-pattern; it is a very reasonable place to place certain elements of your business logic. However, you need to be careful about service level design, ensuring that you do not steal business logic from your domain model and the objects that make it up.
By doing this, you can get a true anti-pattern, anemic region model. This is discussed in detail by Martin Fowler here .
Your IAuthenticationService example may not be the best for discussing the problem - most of the logic around authentication can be seen as living in a service and not related to domain objects. A better example would be if you had some kind of IUserValidationService to validate the user or, even worse, a service that executes something like process orders - the validation service removes the logic from the user object, and the order processing service takes the logic from the objects of your order as well as possibly facilities representing customers, delivery notifications, etc.
David hall
source share