public Task <UserState> ParseResponse(string url) { return(HandleErrors(nameof(ParseResponse), async() => { var response = ResponseParser.ParseAuthenticationUrl(url); var state = await Store.GetAuthState(); ResponseParser.EnsureValidResponse(response, state); ResponseParser.EnsureValidState(response, state); ResponseParser.EnsureTokenOrCodePresence(response, state); await Store.RemoveAuthState(); if (state.IsCodeFlow) { response.Merge(await RequestToken(response, state)); } var token = await ResponseParser.ParseResponse(response, state); var claims = ResponseParser.ParsePayloadClaims(token); if (response.LoadUserInfo) { claims.Merge(await LoadUserInfo(response.AccessToken)); } var userState = ResponseParser.ParseUserState(response, token, claims); return userState; })); }