Исполнение роли пользователей через NTLM

.snk файл используется для подписания блоков, чтобы быть в состоянии добавить их к Глобальному кэшу сборок (GAC).

.snk файл содержит общедоступные и частные маркеры для Вашего ключа. Когда Вы хотите подписать некоторые данные (или двоичный файл) с тем ключом, контрольная сумма вычисляется на данные, которые тогда шифруются с частным маркером. Зашифрованная контрольная сумма тогда добавляется к данным. Любой может использовать общедоступный маркер от Вашего ключа, чтобы дешифровать контрольную сумму и сравнить его с контрольной суммой, которую они вычислили, чтобы проверить, что данные со знаком не вмешались.

можно читать больше о шифровании с открытым ключом в http://en.wikipedia.org/wiki/Public-key_cryptography .

8
задан Vasili Sviridov 6 August 2009 в 00:44
поделиться

1 ответ

Допустим, у вас есть приложение ASP.NET с включенной аутентификацией с помощью форм и формой входа в систему login.aspx, а ваши пользователи хранятся в БД. Теперь вы хотите поддерживать аутентификацию как с помощью форм, так и с помощью Windows. Вот что я делаю:

Для авторизации форм я использую базу данных SQL, скажем, с таблицей Users. Я добавляю в эту таблицу новый столбец с именем WindowsUserName, в котором я сохраню имя пользователя Windows в форме COMPUTER \ User

. В форме login.aspx я добавляю метод, который отправит ответ, который покажет окно входа в систему:

private void ActivateWindowsLogin()
{
    Response.StatusCode = 401;
    Response.StatusDescription = "Unauthorized";
    Response.End();
}

Где-то у меня есть ссылка вроде Admin

В login.aspx Page_Load я добавил:

if (Request.QueryString["use"] == "windows")
{
    var windowsuser = Request.ServerVariables["LOGON_USER"];
    if (windowsuser.Length == 0)
        ActivateWindowsLogin();
    else
    {
        // get userId from DB for Windows user that was authenticated by IIS
        // I use userId in .ASPXAUTH cookie
        var userId = GetUserIdForWindowsUser(windowsuser);
        if (userId > 0) //user found
        {
            // here we get User object to check roles or other stuff
            var user = GetApplicationUser(userId);
            // perform additional checks here and call ActivateWindowsLogin()
            // to show login again or redirect to access denied page.
            // If everythig is OK, set cookie and redirect
            FormsAuthentication.SetAuthCookie(userId.ToString(), false);
            Response.Redirect(FormsAuthentication.GetRedirectUrl(userId.ToString(), false), true);
        }
        else //user not found
            ActivateWindowsLogin();
    }
}
else
{
    //your Forms auth routine
}

GetUserIdForWindowsUser и GetApplicationUser - мои методы просто для образца.

7
ответ дан 5 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: