//public AuthorizeState RegisterEmail(string email, string password, string confirmpassword) //{ // var parameters = GetOAuthAuthenticationParametersFromSession(); // if (parameters != null) // { // var claim = parameters.UserClaims.FirstOrDefault(); // if (claim != null) // { // claim.Contact = new ContactClaims(); // claim.Contact.Email = email; // var result = _authorizer.Authorize(parameters); // return new AuthorizeState(parameters.ExternalDisplayIdentifier, result); // } // } // var state = new AuthorizeState("Login", OpenAuthenticationStatus.Error); // state.AddError("Unknown error"); // return state; //} private void ParseClaims(AuthenticationResult authenticationResult, OAuthAuthenticationParameters parameters, RegisterModel model) { var claims = new UserClaims(); claims.Contact = new ContactClaims(); claims.Contact.Email = model.Email; claims.Password = new PasswordClaims(); claims.Password.Password = model.Password; claims.Password.ConfirmPassword = model.ConfirmPassword; claims.Name = new NameClaims(); if (authenticationResult.ExtraData.ContainsKey("name")) { var name = authenticationResult.ExtraData["name"]; if (!String.IsNullOrEmpty(name)) { var nameSplit = name.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (nameSplit.Length >= 2) { claims.Name.First = nameSplit[0]; claims.Name.Last = nameSplit[1]; } else { claims.Name.Last = nameSplit[0]; } } } if (authenticationResult.ExtraData.ContainsKey("picture")) { claims.Media = new MediaClaims(); claims.Media.Images = new ImageClaims(); claims.Media.Images.Default = authenticationResult.ExtraData["picture"]; } parameters.AddClaim(claims); }
private void SaveOAuthParametersToSession(OAuthAuthenticationParameters parameters) { Session["nop.externalauth.weixin.parameters"] = parameters; }
private AuthorizeState VerifyCode(string returnUrl) { var state = _httpContext.Request.QueryString["state"]; var errorState = new AuthorizeState(returnUrl, OpenAuthenticationStatus.Error); string appId, appSecret; if (state == (string)Session["nop.externalauth.weixin.authentication.native"]) { Session.Remove(("nop.externalauth.weixin.authentication.native")); appId = _weiXinExternalAuthSettings.AppId; appSecret = _weiXinExternalAuthSettings.AppSecret; } else if (state == (string)Session["nop.externalauth.weixin.authentication.web"]) { Session.Remove(("nop.externalauth.weixin.authentication.web")); appId = _weiXinExternalAuthSettings.WebAppId; appSecret = _weiXinExternalAuthSettings.WebAppSecret; } else { errorState.AddError("State not matching"); return(errorState); } var authResult = WeiXinApplication.VerifyCode(_httpContext, GenerateLocalCallbackUri()); if (authResult.IsSuccessful) { if (!authResult.ExtraData.ContainsKey("code")) { throw new Exception("Authentication code does not contain id data"); } var code = authResult.ExtraData["code"]; authResult = WeiXinApplication.VerifyAuthentication(GenerateLocalCallbackUri(), code, appId, appSecret); if (authResult.IsSuccessful) { if (!authResult.ExtraData.ContainsKey("id")) { throw new Exception("Authentication result does not contain id data"); } if (!authResult.ExtraData.ContainsKey("accesstoken")) { throw new Exception("Authentication result does not contain accesstoken data"); } var parameters = new OAuthAuthenticationParameters(Provider.SystemName) { ExternalIdentifier = authResult.ProviderUserId, OAuthToken = authResult.ExtraData["accesstoken"], OAuthAccessToken = authResult.ExtraData["refreshtoken"], ExternalDisplayIdentifier = returnUrl }; if (_externalAuthenticationSettings.AutoRegisterEnabled) { ParseClaims(authResult, parameters, new RegisterModel()); } var user = _openAuthenticationService.GetUser(parameters); //Login User if (user != null) { var result = _authorizer.Authorize(parameters); return(new AuthorizeState(returnUrl, result)); } // Register User else { SaveOAuthParametersToSession(parameters); return(new AuthorizeState("/Plugins/ExternalAuthWeiXin/Register", OpenAuthenticationStatus.AutoRegisteredEmailEnter)); } } } var error = authResult.Error != null ? authResult.Error.Message : "Unknown error"; errorState.AddError(error); return(errorState); }