`authenticate()` writes the discovered identity, if any, to the composed storage object; `clearIdentity()` removes it. The statefulness is in the underlying storage adapter -- and the `AuthenticationService` acts as a facade that interacts with the storage adapter, the credential verification adapter, etc.

I'd argue `clearIdentity()` should remain, @Ocramius -- it's a facade operation.