Andreas Syaloom Kurniawan Ответов: 1

Как настроить роль пользователя sessioning, местоположение, в моем ASP.NET страница (без ASP.NET идентичность).


У меня есть приложение webform на C#, использующее SSO (Single Sign On). Администратор должен зарегистрировать учетную запись электронной почты пользователя, и как только пользователь зарегистрирован в базе данных, он может войти в приложение со своим паролем SSO.

Моя проблема здесь заключается в том, что как только они смогут войти на сайт, я хочу получить их роль и код местоположения их организации.
Я сохранил их имя пользователя в сеансе.

Имя пользователя (имя Пользователя по электронной почте), который хранится в sec_user базе.
Их местоположение и роль хранятся в таблице базы данных sec_role.

<pre lang="c#">

string path = "LDAP://kemenkeu.go.id";

        public string HakAkses
        {
            get { return (string)Session["HakAkses"]; }
            set { Session["HakAkses"] = value; }
        }

        public bool AuthenticateUser(string path, string user, string pass)
        {
            //Return True

            DirectoryEntry de = new DirectoryEntry(path, user, pass, AuthenticationTypes.Secure);
            try
            {
                DirectorySearcher ds = new DirectorySearcher(de);
                ds.FindOne();
                return true;
            }
            catch
            {
                return false;

            }
        }

        protected void btn_entrance_Click(object sender, EventArgs e)
        {
            if (AuthenticateUser(path, txt_username.Text, txt_password.Text) == true)
            {
                string CS = ConfigurationManager.ConnectionStrings["nikita_app"].ConnectionString;
                using (SqlConnection sfe = new SqlConnection(CS))
                {
                    using (SqlCommand cbn = new SqlCommand("xp_otorisasi_user", sfe))
                    {
                        cbn.CommandType = CommandType.StoredProcedure;
                        SqlParameter paramUsername = new SqlParameter("@user_email", txt_username.Text);
                        cbn.Parameters.Add(paramUsername);
                        sfe.Open();
                        int returnCode = (int)cbn.ExecuteScalar();
                        if (returnCode == 1)
                        {
                            Response.Redirect("accueil.aspx");
                            Session["userid"] = txt_username.Text;
                        }
                        else
                        {
                            lbl_info.Text = "Daftarkan Terlebih Dahulu Username Anda ke Admin PK";
                        }
                    }
                }
            }
            else
            {
                lbl_info.Text = "Username/Password anda salah";
            }
        }


Это мой код c#, а вот моя хранимая процедура


CREATE PROCEDURE [dbo].[xp_otorisasi_user]
@user_email varchar(60)

AS
BEGIN
	DECLARE @Count AS INT

	SELECT @Count = COUNT (user_email) from sec_user
	WHERE [user_email]=@user_email

	IF(@Count=1)
		BEGIN	
		SELECT 1 AS ReturnCode
	END
	ELSE
		BEGIN
		SELECT -1 AS ReturnCode
	END

END


Я хочу запросить userrole и userlocation из базы данных
и получить их в сеансе (в asp.net страница)

Что я уже пробовал:

У меня есть попытка сделать выбор внутри

Если (@Count=1)
НАЧАТЬ
Выберите user_role, user_location из sec_role, где user_email=@user_email
Выберите 1 в качестве кода возврата
КОНЕЦ

Но я не знаю, как получить user_role и user_location, которые были выбраны для моего asp.net веб-страница

1 Ответов

Рейтинг:
1

Foothill

Я не могу ответить на бит местоположения, но для пользователей, как только пользователь прошел аутентификацию, вы можете упаковать информацию о сеансе пользователя (идентификатор сеанса и другая информация) в зашифрованный файл cookie, который вы добавляете к каждому из них HttpWebResponse. Каждый HttpWebRequest у меня будет это печенье. Это добавляет немного накладных расходов, но все, что вам нужно сделать, это расшифровать файл cookie и сопоставить его со списком сеансов, хранящимся на сервере. Я сделал это сам и использовал шифрование AES для файлов cookie с уникальным ключом, генерируемым для каждого нового входа в систему. Для вкуса я также сделал так, что новые ключи генерируются каждые пять минут (смягчает взлом сеанса), а устаревшие сеансы удаляются через X минут. Вы даже можете использовать SHA512 для хэширования файла cookie безопасности, чтобы проверить наличие изменений в возвращаемом файле cookie (смягчает атаки "человек посередине").