See the question and my original answer on StackOverflow

User.Identity.Name will only be filled by the Forms Auth authentication provider on return (after the client has been redirected, as you point out).

But during the auth process, in the OpenAuth code before the redirect, the user name is simply represented by AuthenticationResult.UserName (ie: authResult.UserName in ExternalLoginLandingPage.aspx.cs).