private async Task <bool> InvokeReturnPathAsync() { _logger.WriteVerbose("InvokeReturnPath"); var model = await AuthenticateAsync(); var context = new SinaWeiboAccountReturnEndpointContext(Context, model); context.SignInAsAuthenticationType = Options.SignInAsAuthenticationType; context.RedirectUri = model.Properties.RedirectUri; model.Properties.RedirectUri = null; await Options.Provider.ReturnEndpoint(context); if (context.SignInAsAuthenticationType != null && context.Identity != null) { ClaimsIdentity signInIdentity = context.Identity; if (!string.Equals(signInIdentity.AuthenticationType, context.SignInAsAuthenticationType, StringComparison.Ordinal)) { signInIdentity = new ClaimsIdentity(signInIdentity.Claims, context.SignInAsAuthenticationType, signInIdentity.NameClaimType, signInIdentity.RoleClaimType); } Context.Authentication.SignIn(context.Properties, signInIdentity); } if (!context.IsRequestCompleted && context.RedirectUri != null) { Response.Redirect(context.RedirectUri); context.RequestCompleted(); } return(context.IsRequestCompleted); }
private async Task <bool> InvokeReplyPathAsync() { logger.WriteInformation("InvokeReplyPathAsync::::Start"); if (Options.CallbackPath.HasValue && Options.CallbackPath == Request.Path) { AuthenticationTicket ticket = await AuthenticateAsync(); if (ticket == null) { logger.WriteWarning("Invalid return state, unable to redirect."); Response.StatusCode = 500; return(true); } var context = new SinaWeiboAccountReturnEndpointContext(Context, ticket); context.SignInAsAuthenticationType = Options.SignInAsAuthenticationType; context.RedirectUri = ticket.Properties.RedirectUri; logger.WriteInformation("InvokeReplyPathAsync::::context.RedirectUri = ticket.Properties.RedirectUri;ticket.Properties.RedirectUri:" + ticket.Properties.RedirectUri); logger.WriteInformation("InvokeReplyPathAsync::::await Options.Provider.ReturnEndpoint(context);"); await Options.Provider.ReturnEndpoint(context); logger.WriteInformation("context.SignInAsAuthenticationType:" + context.SignInAsAuthenticationType); logger.WriteInformation("context.Identity :" + context.Identity); if (context.SignInAsAuthenticationType != null && context.Identity != null) { logger.WriteInformation("InvokeReplyPathAsync::::context.SignInAsAuthenticationType != null &&context.Identity != null"); ClaimsIdentity signInIdentity = context.Identity; if (!string.Equals(signInIdentity.AuthenticationType, context.SignInAsAuthenticationType, StringComparison.Ordinal)) { signInIdentity = new ClaimsIdentity(signInIdentity.Claims, context.SignInAsAuthenticationType, signInIdentity.NameClaimType, signInIdentity.RoleClaimType); } logger.WriteInformation("InvokeReturnPathAsync:::: Context.Authentication.SignIn(context.Properties, signInIdentity);"); Context.Authentication.SignIn(context.Properties, signInIdentity); } if (!context.IsRequestCompleted && context.RedirectUri != null) { string redirectUri = context.RedirectUri; if (context.Identity == null) { redirectUri = WebUtilities.AddQueryString(redirectUri, "error", "access_denied"); } Response.Redirect(redirectUri); context.RequestCompleted(); } logger.WriteInformation("InvokeReplyPathAsync::::return context.IsRequestCompleted:" + context.IsRequestCompleted); logger.WriteInformation("InvokeReplyPathAsync::::End"); return(context.IsRequestCompleted); } logger.WriteInformation("InvokeReplyPathAsync::::return false"); logger.WriteInformation("InvokeReplyPathAsync::::End"); return(false); #region old code //logger.WriteInformation("InvokeReturnPathAsync::::Start"); //logger.WriteInformation("InvokeReturnPathAsync:::: var model = await AuthenticateAsync();"); //var model = await AuthenticateAsync(); //if (model == null || model.Properties == null) //{ // logger.WriteInformation("InvokeReturnPathAsync:::: model == null || mode.Properties:[NULL]"); // logger.WriteInformation("InvokeReturnPathAsync:::: return false;"); // logger.WriteInformation("InvokeReturnPathAsync::::END"); // return false; //} ////_logger.WriteInformation("InvokeReturnPathAsync:::: mode.Properties.RedirectUri:" + model.Properties.RedirectUri); //var context = new SinaWeiboAccountReturnEndpointContext(Context, model); //context.SignInAsAuthenticationType = Options.SignInAsAuthenticationType; ////context.RedirectUri = model.Properties.RedirectUri; //context.RedirectUri = GenerateRedirectUri(); //model.Properties.RedirectUri = null; //logger.WriteInformation("InvokeReturnPathAsync:::: await Options.Provider.ReturnEndpoint(context);" ); //await Options.Provider.ReturnEndpoint(context); //if (context.SignInAsAuthenticationType != null && context.Identity != null) //{ // ClaimsIdentity signInIdentity = context.Identity; // if (!string.Equals(signInIdentity.AuthenticationType, context.SignInAsAuthenticationType, StringComparison.Ordinal)) // { // signInIdentity = new ClaimsIdentity(signInIdentity.Claims, context.SignInAsAuthenticationType, signInIdentity.NameClaimType, signInIdentity.RoleClaimType); // } // logger.WriteInformation("InvokeReturnPathAsync:::: Context.Authentication.SignIn(context.Properties, signInIdentity);"); // Context.Authentication.SignIn(context.Properties, signInIdentity); //} //if (!context.IsRequestCompleted && context.RedirectUri != null) //{ // logger.WriteInformation("InvokeReturnPathAsync:::: Response.Redirect(context.RedirectUri);"); // logger.WriteInformation("InvokeReturnPathAsync:::: ::::context.RedirectUri:" + context.RedirectUri); // Response.Redirect(context.RedirectUri); // context.RequestCompleted(); //} //logger.WriteInformation("InvokeReturnPathAsync:::: return context.IsRequestCompleted:" + context.IsRequestCompleted); //logger.WriteInformation("InvokeReturnPathAsync::::END"); //return context.IsRequestCompleted; #endregion }