added authentication abstraction