powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как из APEX получить имя пользователя ОС Windows?
25 сообщений из 43, страница 1 из 2
Как из APEX получить имя пользователя ОС Windows?
    #38590860
uncle_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователи моего APEX-приложения не желают при обращении к приложению логиниться по-новой (проходить аутентификацию в приложении).
У приложения имеется несколько категорий пользователей с различными наборами привилегий. Есть таблица пользователей с полем кода категории, которая сейчас используется (после того, как пройдена аутентификация) при авторизации (задействована PL/SQL-функция определения категории, работающая с таблицей пользователей).
Хочется сделать так:
1. при обращении к приложению - из Windows забирать UserName (тот, что получается командой echo %UserName% в командном окне Windows)
2. использовать его при авторизации пользователя приложения и, соответственно, запускать пользователя в главное меню его категории и т.п.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38590964
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uncle_vo,

Попробуйте покопать в сторону ActiveX, но они могут быть запрещены и заработают скорее всего только в IE.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38591008
uncle_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gustly,

научите, пожалуйста, как к Active X пробраться в APEX - прямо скажу, это для меня тёмный лес.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38591285
То, что Вам нужно, называется transparent ntlm authentication .
Реализуется, например, такой связкой: Apache+mod_plsql+mod_auth_sspi
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38591389
Полено
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uncle_voПользователи моего APEX-приложения не желают при обращении к приложению логиниться по-новой (проходить аутентификацию в приложении).
У приложения имеется несколько категорий пользователей с различными наборами привилегий. Есть таблица пользователей с полем кода категории, которая сейчас используется (после того, как пройдена аутентификация) при авторизации (задействована PL/SQL-функция определения категории, работающая с таблицей пользователей).
Хочется сделать так:
1. при обращении к приложению - из Windows забирать UserName (тот, что получается командой echo %UserName% в командном окне Windows)
2. использовать его при авторизации пользователя приложения и, соответственно, запускать пользователя в главное меню его категории и т.п.
Не повезло же вам с пользователями. Однако они (пользователи) этого не должны решать и делать такую дыру в безопасности. Не тратьте время на реализация не только бестолкового но и потенциально вредительского (как сказал бы Иосиф Виссарионович) требования.
1) Данная задача согласована с их/вашим руководством?
2) В зависимости от П1 , ну сделайте тогда им галку "запомнить меня", "как в одноклассниках" что ли.
3) Еще можно юсб токены всем выдать.... ну как крайний вариант.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38591568
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю стоит покопать в сторону браузерной аутентификации (basic, ntlm и т.д.).
В апексе найти инструкцию по её настройке, думаю, не должно быть проблемой,
Осталось эту аутентификацию интегрировать с аутентификацией windows, какие-то средства должны быть...

Материал из википедии по теме

Integrated Windows Authentication
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38593445
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38593446
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как из APEX получить имя пользователя ОС Windows?
    #38971741
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Ни у кого в последнее время не ломалась в Файерфоксе аутентификация windows по данному гайду?
http://www.yenlo.nl/nl/how-to-implement-single-sign-on-using-ntlm/

У нас у некоторых пользователей к имени пользователя начал приписываться лишний символ в начале. У каждого разный. Причем в Хроме работает нормально.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38971762
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sah,
а причём хром, если код выше - серверный.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38973103
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серверный код парсит и декодирует переменную окружения устанавливаемую в сессии по данным, пришедшим по запросу из конкретного браузера.
Код: plsql
1.
OWA_UTIL.get_cgi_env ('AUTHORIZATION')



Раньше, имя пользователя Windows вычислялось одинаково и в Chrome и в FireFox.
А недавно обнаружилось, что для некоторых пользователей в FireFox приписывается лишний символ.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38973197
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sah,
странно.
При соединении по LDAP вы в
DBMS_LDAP.search_s пишите входным параметром имя и пароль юзверя.
Т.е. вы даёте на сервере имя пользователя из переменной items на клиенте.
Тогда вопрос в чём?
Если вы только что дали имя юзверя сами на сервер, то зачем его искать
в переменных CGI
Код: sql
1.
OWA_UTIL.get_cgi_env ('AUTHORIZATION')


?
И зачем было заводить переменную AUTHORIZATION?
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38973203
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38973218
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sah,
LDAP - доп.СУБД по юзверям в организации.
Там можно получить всю инфу по юзверям. (даже имя собаки у его тёщи).
Но вопрос как бы вне APEX - получаем объект LDAP и спрашиваем
(при условии что apex custom authentication scheme настрили на LDAP)
IMHO
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38974193
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос не про LDAP авторизацию. С ней всё в порядке. Вопрос про то, чтобы пользователю вообще логин/пароль не вводить.
А для этого из браузера Апекс должен вытащить имя пользователя.
Под Винду это обеспечивает модуль auth_sspi. А для Линкуса подобного модуля нет.
Вот и приходится изгаляться кодом на чистом PL/SQL, приведённым по ссылке.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38974213
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sahauth_sspi.
это понятно. Дальше то что?
Я дал вам выше ссылку на короткое решение.
В сети много барахла всягого и устаревшего морально на 15 лет.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38974217
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apex custom authentication scheme
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38975512
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любая apex custom authentication scheme начинается с получения имени пользователя.
Вот его-то я и не могу получить.

А способа получения имени пользователя windows, кроме приведённого выше по моей ссылке, до сих пор не предложено.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38975535
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sah,
ссылка не твоя.
Покажи свой код получения имени пользователя.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38975710
SahПод Винду это обеспечивает модуль auth_sspi. А для Линкуса подобного модуля нет
есть . просто искать нужно лучше.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38975714
SahА способа получения имени пользователя windows, кроме приведённого выше по моей ссылке, до сих пор не предложено.
предложено. используйте apex listener (ORDS) + Apache TomCat. Для томката есть фильтр spnego . всё работает отлично. не раз настраивал.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38976419
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Sah,
ссылка не твоя.
Покажи свой код получения имени пользователя.

Ссылку привёл, потому что код полностью скопирован оттуда

Код: plsql
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.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
CREATE OR REPLACE FUNCTION apex_sentry_ntnm
   RETURN BOOLEAN
IS
   v_app_id            APEX_APPLICATION.g_flow_id%TYPE;
   l_username          VARCHAR2 (512);
   l_session_id        NUMBER;
   l_raw               RAW (1000);
   l_domain            VARCHAR2 (128);
   l_user              VARCHAR2 (128);
   l_auth              VARCHAR2 (512);
   l_decode            VARCHAR2 (2000);
   l_off               PLS_INTEGER := 0;
   l_length            PLS_INTEGER;
   l_offset            PLS_INTEGER;
   l_htp_buffer        HTP.htbuf_arr;
   l_htp_rows          INTEGER;
   l_url               VARCHAR2 (500);
   l_charset           VARCHAR2 (128);
   l_browser_version   VARCHAR2 (128);
BEGIN

   v_app_id := APEX_APPLICATION.g_flow_id;
   l_username := APEX_CUSTOM_AUTH.get_username;

   -- if session is valid return true
   IF     APEX_CUSTOM_AUTH.is_session_valid
      AND APEX_APPLICATION.g_user IS NOT NULL
      AND UPPER (APEX_APPLICATION.g_user) != 'NOBODY'
   THEN
      RETURN TRUE;
   END IF;

   IF APEX_CUSTOM_AUTH.is_session_valid
   THEN
      APEX_CUSTOM_AUTH.set_session_id (
         APEX_CUSTOM_AUTH.get_session_id_from_cookie);

      l_username := APEX_CUSTOM_AUTH.get_username;

      IF l_username IS NOT NULL AND l_username != 'NOBODY'
      THEN
         APEX_CUSTOM_AUTH.set_user (l_username);
      END IF;
     ELSE
       apex_custom_auth.set_session_id(apex_custom_auth.GET_NEXT_SESSION_ID);

   END IF;

   -- check, if the user is already logged into apex
   APEX_APPLICATION.g_flow_id := 111;

   IF APEX_CUSTOM_AUTH.is_session_valid
   THEN
      APEX_APPLICATION.g_instance :=
         APEX_CUSTOM_AUTH.get_session_id_from_cookie;
      APEX_APPLICATION.g_user := APEX_CUSTOM_AUTH.get_username;

   END IF;

   APEX_APPLICATION.g_flow_id := v_app_id;

   IF UPPER (l_username) = 'NOBODY'
   THEN

      l_auth := OWA_UTIL.get_cgi_env ('AUTHORIZATION');

      IF l_auth IS NULL
      THEN

         OWA_UTIL.status_line (nstatus         => 401,
                               creason         => 'Unauthorized',
                               bclose_header   => FALSE);
         HTP.P ('WWW-Authenticate: NTLM');
         OWA_UTIL.mime_header ('text/html', FALSE, 'utf-8');
         OWA_UTIL.http_header_close;
         wwv_flow.g_unrecoverable_error := TRUE;
         RETURN FALSE;
      END IF;


      l_decode :=
         UTL_ENCODE.text_decode (buf        => SUBSTR (l_auth, 6),
                                 encoding   => UTL_ENCODE.BASE64);

      l_raw := UTL_RAW.cast_to_raw (l_decode);


      IF UTL_RAW.cast_to_binary_integer (UTL_RAW.SUBSTR (l_raw, 14, 1)) !=
            130
      THEN
         IF UTL_RAW.cast_to_binary_integer (UTL_RAW.SUBSTR (l_raw, 9, 1)) = 1
         THEN
            OWA_UTIL.mime_header ('text/html', FALSE, 'utf-8');
            OWA_UTIL.status_line (nstatus         => 401,
                                  creason         => 'Unauthorized',
                                  bclose_header   => FALSE);
            HTP.P (
               'WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAAAAACgAAAABggAAAAICAgAAAAAAAAAAAAAAAA==');
            OWA_UTIL.http_header_close;
            wwv_flow.g_unrecoverable_error := TRUE;
            RETURN FALSE;
         END IF;

         -- Determine DB charset and convert raw to WE8MSWIN1252, thanks to Andrew Barbaccia
         SELECT VALUE
           INTO l_charset
           FROM nls_database_parameters
          WHERE parameter = 'NLS_CHARACTERSET';

         l_length :=
                UTL_RAW.cast_to_binary_integer (
                   UTL_RAW.SUBSTR (l_raw, 32, 1))
              * 256
            + UTL_RAW.cast_to_binary_integer (UTL_RAW.SUBSTR (l_raw, 31, 1));
         l_offset :=
                UTL_RAW.cast_to_binary_integer (
                   UTL_RAW.SUBSTR (l_raw, 34, 1))
              * 256
            + UTL_RAW.cast_to_binary_integer (UTL_RAW.SUBSTR (l_raw, 33, 1));
         l_domain :=
            REPLACE (
               REPLACE (
                  SUBSTR (
                     CONVERT (UTL_RAW.cast_to_varchar2 (l_raw),
                              l_charset,
                              'WE8MSWIN1252'),
                     l_offset + 1,
                     l_length),
                  CHR (0),
                  NULL),
               CHR (15),
               NULL);
         l_length :=
                UTL_RAW.cast_to_binary_integer (
                   UTL_RAW.SUBSTR (l_raw, 40, 1))
              * 256
            + UTL_RAW.cast_to_binary_integer (UTL_RAW.SUBSTR (l_raw, 39, 1));
         l_offset :=
                UTL_RAW.cast_to_binary_integer (
                   UTL_RAW.SUBSTR (l_raw, 42, 1))
              * 256
            + UTL_RAW.cast_to_binary_integer (UTL_RAW.SUBSTR (l_raw, 41, 1));
         l_user :=
            REPLACE (
               SUBSTR (
                  CONVERT (UTL_RAW.cast_to_varchar2 (l_raw),
                           l_charset,
                           'WE8MSWIN1252'),
                  l_offset,
                  l_length),
               CHR (0),
               NULL);

         IF l_domain IS NULL
         THEN
            l_username := l_user;
         ELSE
            l_username := l_domain || '\' || l_user;
         END IF;

         APEX_APPLICATION.g_user := l_username;
      ELSE                                           -- cast_to_binary_integer

         OWA_UTIL.status_line (nstatus         => 401,
                               creason         => 'Unauthorized',
                               bclose_header   => FALSE);
         HTP.P (
            'WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAAAAACgAAAABggAAAAICAgAAAAAAAAAAAAAAAA==');
         OWA_UTIL.mime_header ('text/html', FALSE, 'utf-8');
         OWA_UTIL.http_header_close;
         wwv_flow.g_unrecoverable_error := TRUE;
         RETURN FALSE;
      END IF;                                        -- cast_to_binary_integer
   END IF;

   IF APEX_APPLICATION.g_user IS NULL
   THEN
      RETURN FALSE;
   END IF;

   -- user is an apex user and logged in
   IF     APEX_APPLICATION.g_user IS NOT NULL
      AND UPPER (APEX_APPLICATION.g_user) != 'NOBODY'
   THEN
      APEX_CUSTOM_AUTH.set_session_id_to_next_value;

      APEX_CUSTOM_AUTH.define_user_session (
         p_user         => APEX_APPLICATION.g_user,
         p_session_id   => APEX_APPLICATION.g_instance);

      APEX_CUSTOM_AUTH.post_login (
         p_uname        => APEX_APPLICATION.g_user,
         p_session_id   => APEX_APPLICATION.g_instance,
         p_app_page     =>    APEX_APPLICATION.g_flow_id
                           || ':'
                           || NVL (APEX_APPLICATION.g_flow_step_id, 1));
      RETURN TRUE;
   END IF;

   RETURN FALSE;
EXCEPTION
   WHEN OTHERS
   THEN
      OWA_UTIL.status_line (nstatus         => 401,
                            creason         => 'Unauthorized',
                            bclose_header   => FALSE);
      HTP.P ('WWW-Authenticate: NTLM');
      OWA_UTIL.mime_header ('text/html', FALSE, 'utf-8');
      OWA_UTIL.http_header_close;
      wwv_flow.g_unrecoverable_error := TRUE;
      RETURN FALSE;
END;
/



...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38976427
Sah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трудяга БиггерSahА способа получения имени пользователя windows, кроме приведённого выше по моей ссылке, до сих пор не предложено.
предложено. используйте apex listener (ORDS) + Apache TomCat. Для томката есть фильтр spnego . всё работает отлично. не раз настраивал.

Спасибо, не слышал про этот проект.
А как к АПЕКСУ его прикрутить, чтобы в приложении получить :APP_USER?
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38976496
SahТрудяга Биггерпропущено...
Спасибо, не слышал про этот проект.
А как к АПЕКСУ его прикрутить, чтобы в приложении получить :APP_USER?
если у Вас апач+линукс, то попробуйте модуль mod_auth_kerb, ссылка в есть выше. этот путь проще.
если все же хочется ords+tomcat, то для начала попробуйте их заинсталлить и настроить. доки есть в сети.
а как прикрутить spnego могу рассказать, Вы для начала определитесь с сервером приложений.
...
Рейтинг: 0 / 0
Как из APEX получить имя пользователя ОС Windows?
    #38976556
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sah,
Не вижу кода
l_username := APEX_CUSTOM_AUTH.get_username;
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Как из APEX получить имя пользователя ОС Windows?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]