powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Просьба к SvDev
6 сообщений из 6, страница 1 из 1
Просьба к SvDev
    #39191238
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу Sentry функцию для кастомной атворизации, все практически работает.
Можете мне пример Вашей функции привести?
...
Рейтинг: 0 / 0
Просьба к SvDev
    #39191520
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

Пример есть в help-е начиная с 4.2:



function sentry_basic_auth
return boolean
is
c_auth_header constant varchar2(4000) := owa_util.get_cgi_env('AUTHORIZATION');
l_user_pass varchar2(4000);
l_separator_pos pls_integer;
begin
if apex_application.g_user <> 'nobody' then
return true;
end if;

if c_auth_header like 'Basic %' then
l_user_pass := utl_encode.text_decode (
buf => substr(c_auth_header, 7),
encoding => utl_encode.base64 );
l_separator_pos := instr(l_user_pass, ':');
if l_separator_pos > 0 then
apex_authentication.login (
p_username => substr(l_user_pass, 1, l_separator_pos-1),
p_password => substr(l_user_pass, l_separator_pos+1) );
return true;
end if;
end if;

return false;
end sentry_basic_auth;

and within 'Sentry Function'

sentry_basic_auth


+ за примерами можно полазить в код по плагинам:

http://apex-plugin.com/oracle-apex-plugins/authentication-plugin.html

ну или в интернете:

https://community.oracle.com/thread/2355817?start=0&tstart=0

я стараюсь избегать использования sentry ввиду повышенной вероятности того, что где-нибудь сломается с новой версией,
там на каждый чих есть свой другой атрибут (например, Security Attributes > Initialization PL/SQL Code и др.), поэтому её используют в основном для аутентификации basic, ntlm, да Session Joining, если ниже 5-ки, чего мне пока было не нужно.

P.S. тут есть много участников с высокой квалификацией, не стоит адресовать вопрос лично ко мне, если есть именно личные вопросы именно ко мне (например, вопросы по разработкам которыми я уже делился) пишите на почту в профиле, она у меня всегда открыта.
...
Рейтинг: 0 / 0
Просьба к SvDev
    #39191557
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько я гуглил в нете, примеры есть, но все видимо для более ранних версий.

SvDevну или в интернете:

https://community.oracle.com/thread/2355817?start=0&tstart=0

Относится к версии 4.1, как Вы правильно заметили, с каждой версией механизм меняется, и для 4.2 уже не подходит.



SvDevP.S. тут есть много участников с высокой квалификацией, не стоит адресовать вопрос лично ко мне, если есть именно личные вопросы именно ко мне (например, вопросы по разработкам которыми я уже делился) пишите на почту в профиле, она у меня всегда открыта.
Виноват, исправлюсь.
...
Рейтинг: 0 / 0
Просьба к SvDev
    #39191707
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
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.
begin
    LOGDB('----------------------------------------------------------');
    l_cookie_sid := apex_custom_auth.get_session_id_from_cookie;
    GET_COOKIES_SSO(l_sso_username, l_sso_userFIO);
    LOGDB('---, a.cookie_sid\g_user\user\l_sso_username:       ' ||l_cookie_sid||'\'||apex_application.g_user||'\'||user||'\'||l_sso_username);
    if apex_custom_auth.is_session_valid and (length(l_sso_username) > 0) then
        LOGDB('session valid and a.get_username '|| apex_custom_auth.get_username);
        return true;
    else
        LOGDB('session no valid');
        if length(l_sso_username) > 0 then
          APEX_CUSTOM_AUTH.DEFINE_USER_SESSION (l_sso_username, 
                    APEX_CUSTOM_AUTH.GET_NEXT_SESSION_ID);
          LOGDB('return true; = reload');
          return true;
        elsif length(apex_application.g_user) > 0 then
          LOGDB('return true; = loginForm - вход через ф.логин (api.login(name,pass))');
          -- делаем сессию валидной
          return true;
        else
          LOGDB('return false; = loginForm');
          -- обнулить всё что можно
          APEX_UTIL.CLEAR_APP_CACHE(CONST_APPID);
          apex_authorization.reset_cache;
          return false;
        end if;
    end if;
end;
/
...
Рейтинг: 0 / 0
Просьба к SvDev
    #39191777
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

В общем примеры накидали, если решения не найдется, чтобы обсуждать дальше нужны: описание задачи, код, сценарий при котором что-то не работает, точная версия апекс и выкладка из апекс дебага =
...
Рейтинг: 0 / 0
Просьба к SvDev
    #39191919
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде заработала как надо. Надо наверное пояснить что делает.
1. Эта функция для кастомной авторизации.
2. Если у Вас есть действующая сессия, то можно открыть ссылку без номера/или не действующим уже номером сессии в этом приложении, то сессия автоматически подцепиться и Вы откроете страницу.
3. Так же если Вы открываете ссылку, например 320 страницу, а действующей сессии нет, то Вас сначала кинет на страницу авторизации, а потом на нужную страницу.

P.S. Чтобы открыть нужный номер страницы, на ней должен быть включен Deep Linking = Enable.
P.S.S Протестировано на версиях Апекса 4.2.2-4.2.6

Если кто то воспользуется и обнаружит глюки, буду благодарен, что отпишется.

Код: 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.
function page_sentry (p_apex_user in varchar2 default 'APEX_PUBLIC_USER' ) return boolean is
	l_cgi_var_name              varchar2(100) := 'REMOTE_USER';  
	l_authenticated_username    varchar2(256) := upper(owa_util.get_cgi_env(l_cgi_var_name));  		
	--
	l_current_sid								number;

Begin
	if user != upper(p_apex_user) then
		return false;
	end if;	
	if l_authenticated_username is null  then  
		return false;   
	end if;  	

	l_current_sid := apex_custom_auth.get_session_id_from_cookie;
	if apex_custom_auth.is_session_valid then
		apex_application.g_instance := l_current_sid;
		if l_authenticated_username=apex_custom_auth.get_username then
			apex_custom_auth.define_user_session(  
				p_user=>l_authenticated_username,  
				p_session_id=>l_current_sid
			);
			return true;
		elsif apex_application.g_user = 'nobody' then
			l_current_sid:=apex_custom_auth.get_next_session_id;
			apex_custom_auth.define_user_session(
				p_user=>l_authenticated_username, 
				p_session_id=>l_current_sid
			);				
			return false;
		else	
			apex_custom_auth.define_user_session(  
				p_user=>apex_custom_auth.get_username,  
				p_session_id=>l_current_sid
			);				
			return true;
		end if;
		return true;
	else
		l_current_sid:=apex_custom_auth.get_next_session_id;
		apex_custom_auth.define_user_session(
			p_user=>l_authenticated_username, 
			p_session_id=>l_current_sid
		);
		return false; 		
	end if; 
End page_sentry;

...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Просьба к SvDev
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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