Example #1
0
        //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);
        }
Example #2
0
 private void SaveOAuthParametersToSession(OAuthAuthenticationParameters parameters)
 {
     Session["nop.externalauth.weixin.parameters"] = parameters;
 }
Example #3
0
        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);
        }