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

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

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

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

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

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



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


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

А способа получения имени пользователя windows, кроме приведённого выше по моей ссылке, до сих пор не предложено.
...
Рейтинг: 0 / 0
03.06.2015, 17:12
    #38975535
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из APEX получить имя пользователя ОС Windows?
Sah,
ссылка не твоя.
Покажи свой код получения имени пользователя.
...
Рейтинг: 0 / 0
03.06.2015, 21:48
    #38975710
Как из APEX получить имя пользователя ОС Windows?
SahПод Винду это обеспечивает модуль auth_sspi. А для Линкуса подобного модуля нет
есть . просто искать нужно лучше.
...
Рейтинг: 0 / 0
03.06.2015, 21:53
    #38975714
Как из APEX получить имя пользователя ОС Windows?
SahА способа получения имени пользователя windows, кроме приведённого выше по моей ссылке, до сих пор не предложено.
предложено. используйте apex listener (ORDS) + Apache TomCat. Для томката есть фильтр spnego . всё работает отлично. не раз настраивал.
...
Рейтинг: 0 / 0
04.06.2015, 15:53
    #38976419
Sah
Sah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из APEX получить имя пользователя ОС Windows?
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
04.06.2015, 15:56
    #38976427
Sah
Sah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из APEX получить имя пользователя ОС Windows?
Трудяга БиггерSahА способа получения имени пользователя windows, кроме приведённого выше по моей ссылке, до сих пор не предложено.
предложено. используйте apex listener (ORDS) + Apache TomCat. Для томката есть фильтр spnego . всё работает отлично. не раз настраивал.

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


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