14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
1

Аутентификация через стандартное хранилище Windows

07.04.2015, 05:52. Показов 1941. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую знатоков!
Задача пройти аутентификацию в программе используя стандартное хранилище аккаунтов Windows. Существует ли какой-нибудь api для этого?
Даже не обязателен маркер доступа. Достаточно просто проверить валидность связки ИмяПользователя + Пароль, и ответить true/false.

Нужна функция bool Authentication(Username, Password);

Изучал Authz но это вроде не то, что нужно.

Разработка под win7
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2015, 05:52
Ответы с готовыми решениями:

Аутентификация в моей программе через AD
Здравствуйте. Не уверен куда писать, интересует не только .Net конечно..., но возможно вы поможете...

SQL windows аутентификация вне домена
1) Есть SQL Server 2008 (установлен на ящике который в домене) аутентификация смешанная; 2) На SQL...

Аутентификация Windows
Настроил Аутентификацию Windows , но не могу разобраться с настройками параметра "Authorize"...

Membership api, аутентификация истекает через минуту
На разрабатываемом компьютере со студией все нормально, но заливаю сайт на хостинг, после логина...

2
.NET C#,ASP.NET MVC
Эксперт .NET
595 / 506 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
07.04.2015, 09:33 2
Лучший ответ Сообщение было отмечено GBIT как решение

Решение

Когдато писал класс для аутентефикации на шаре в доменной сети, может чемто пригодиться
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
public class UNCAccess
    {
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        internal struct USE_INFO_2
        {
            internal LPWSTR ui2_local;
            internal LPWSTR ui2_remote;
            internal LPWSTR ui2_password;
            internal DWORD ui2_status;
            internal DWORD ui2_asg_type;
            internal DWORD ui2_refcount;
            internal DWORD ui2_usecount;
            internal LPWSTR ui2_username;
            internal LPWSTR ui2_domainname;
        }
        [DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        internal static extern NET_API_STATUS NetUseAdd(
        LPWSTR UncServerName,
        DWORD Level,
        ref USE_INFO_2 Buf,
        out DWORD ParmError);
        [DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        internal static extern NET_API_STATUS NetUseDel(
        LPWSTR UncServerName,
        LPWSTR UseName,
        DWORD ForceCond);
        private string sUNCPath;
        private string sUser;
        private string sPassword;
        private string sDomain;
        private int iLastError;
        public UNCAccess()
        {
        }
        public UNCAccess(string UNCPath, string User, string Domain, string Password)
        {
            login(UNCPath, User, Domain, Password);
        }
        public int LastError
        {
            get { return iLastError; }
        }
        ///
 
        /// Connects to a UNC share folder with credentials
        ///
        /// UNC share path
        /// Username
        /// Domain
        /// Password
        /// True if login was successful
        public bool login(string UNCPath, string User, string Domain, string Password)
        {
            sUNCPath = UNCPath;
            sUser = User;
            sPassword = Password;
            sDomain = Domain;
            return NetUseWithCredentials();
        }
        private bool NetUseWithCredentials()
        {
            uint returncode;
            try
            {
                USE_INFO_2 useinfo = new USE_INFO_2();
 
                useinfo.ui2_remote = sUNCPath;
                useinfo.ui2_username = sUser;
                useinfo.ui2_domainname = sDomain;
                useinfo.ui2_password = sPassword;
                useinfo.ui2_asg_type = 0;
                useinfo.ui2_usecount = 1;
                uint paramErrorIndex;
                returncode = NetUseAdd(null, 2, ref useinfo, out paramErrorIndex);
                iLastError = (int)returncode;
                return returncode == 0;
            }
            catch
            {
                iLastError = Marshal.GetLastWin32Error();
                return false;
            }
        }
        ///
        /// Closes the UNC share
        ///
        /// True if closing was successful
        public bool NetUseDelete()
        {
            uint returncode;
            try
            {
                returncode = NetUseDel(null, sUNCPath, 2);
                iLastError = (int)returncode;
                return (returncode == 0);
            }
            catch
            {
                iLastError = Marshal.GetLastWin32Error();
                return false;
            }
        }
    }
0
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
08.04.2015, 10:17  [ТС] 3
lvlkoo, отмечу, что аутентификация необходима через локальную базу учетных записей.
Попытаюсь найти что-нибудь полезное у вас.
Вопрос остается открыт.

Добавлено через 18 часов 30 минут
lvlkoo, по сути вся магия в NetUseAdd(), но это совсем не то, хотя за пример кода спасибо.

Добавлено через 4 часа 3 минуты
API Решение: LogonUser()
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("advapi32.dll")]
        public static extern bool LogonUser( string name, string domain, string pass, int logType, int logpv, ref IntPtr pht );
 
        private void button1_Click( object sender, EventArgs e )
        {
            IntPtr th = IntPtr.Zero;
            bool log = LogonUser(textBox1.Text, null, textBox2.Text, 2, 0, ref th);
            if( log )
            {
                MessageBox.Show("Good!");
            }
            else
            {
                MessageBox.Show("Error!");
            }
        }
    }
}
Пример тут подсмотрел
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2015, 10:17
Помогаю со студенческими работами здесь

Аутентификация через API сайта
Здравствуйте, Мне требуется сделать запрос на аутентификаю на сайте с помощью API. Request...

Почему не работает аутентификация ни Windows ни Forms?
1) Использую Windows аутент. в Web.config прописал: <authentication mode="Windows" /> в...

Rad Studio 10. Delphi. FireDAC. FDConnect. Аутентификация через учетку Windows
доброго дня, форумчани. есть проект работающий с SQL server. соединение идет через firedac....

8.3 Упр.прил.: Параметры на сервер через временное хранилище или через структуру ?
Слышал где-то, что большие объемы данных с клиента на сервер лучше посылать через временное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru