在 Oracle Apex (v21.1) 中检索用户密码
Retrieve User's Password in Oracle Apex (v21.1)
自从我 2 post 关于 LDAP 身份验证 (first post, ) 以来,我们创建了自己的自定义身份验证方案和功能,以使用我们的 Active Directory 凭据连接到应用程序。
我们可以成功登录应用程序。但是,我们有第二个函数可以检索 AD 中的用户组。这是我尝试将组检索到文本字段 (P1_GROUP) 时的代码:
ourschema.ldap_get_group_apex_from_user(
p_username => v('APP_USER'),
p_password => 'thepassword')
如您所见,这是有效的,因为密码在 static 文本中。这引出了我的主要问题:
如何在 Oracle Apex 中找回用户密码,最安全的方法是什么?
我尝试在登录页面中设置 Branch 或 Process,同时重定向用户的主页,并且将 :P9999_PASSWORD 字段的值 设置为主页文本字段 P1_PWD.
因此,我尝试使用文本字段调整我的代码
ourschema.ldap_get_group_apex_from_user(
p_username => v('APP_USER'),
p_password => :P1_PWD)
不幸的是,这似乎不安全,因为密码会在页面的 HTML 代码中可见(右键单击 + 检查就可以看到。此外,有时它会给我一个错误
Error computing item source value for page item P1_GROUP
应用程序似乎无法执行该功能,因为密码仍未初始化。
有没有办法检索 :P9999_PASSWORD 或将其从登录页面传输到全局 variable/global 页面或文本字段?或者有找回当前用户密码的功能吗?
再次感谢您抽出宝贵时间,请不要犹豫,询问更多详情,因为这是一个非常具体的案例,
托马斯
我认为你的做法不对。理想情况下,即使是系统管理员也不能解密用户的密码;它们应该存储为散列。
您正在尝试查找用户的群组成员资格?您不需要用户自己的凭据来执行此操作。 使用可以访问您的 Active Directory 系统的专用帐户,并将该密码加密存储在您的数据库中。使用该帐户搜索和查找用户的组成员身份。这样,即使您的系统遭到入侵,也只会暴露该帐户。
感谢大家对我的案例的回答和建议,以及抽出时间提供帮助。
我们找到了一个我们认为可靠的解决方案,以下是我们所做的,如果它可以帮助其他人。
我们创建了一个全局变量G_GROUP
,它将接收用户所在的组
在登录页面上,我们在登录过程之前创建了一个过程。
将进程的 Source 设置为 PL/SQL Code :
:G_GROUP := pdbadmin.ldap_get_group_apex_from_user( --our custom function to retrieve groups
p_username => :P9999_USERNAME,
p_password => :P9999_PASSWORD); -- the function get the username and password in the fields
- 如果我想在主页中显示用户组,让我们创建一个 文本字段 P1_GROUP,至于 Source PL/SQL 表达式
:G_GROUP
我们的群已初始化,密码未显示在任何字段中。
让我知道你的想法,如果你们认为这可以改进。
自从我 2 post 关于 LDAP 身份验证 (first post,
我们可以成功登录应用程序。但是,我们有第二个函数可以检索 AD 中的用户组。这是我尝试将组检索到文本字段 (P1_GROUP) 时的代码:
ourschema.ldap_get_group_apex_from_user(
p_username => v('APP_USER'),
p_password => 'thepassword')
如您所见,这是有效的,因为密码在 static 文本中。这引出了我的主要问题:
如何在 Oracle Apex 中找回用户密码,最安全的方法是什么?
我尝试在登录页面中设置 Branch 或 Process,同时重定向用户的主页,并且将 :P9999_PASSWORD 字段的值 设置为主页文本字段 P1_PWD.
因此,我尝试使用文本字段调整我的代码
ourschema.ldap_get_group_apex_from_user(
p_username => v('APP_USER'),
p_password => :P1_PWD)
不幸的是,这似乎不安全,因为密码会在页面的 HTML 代码中可见(右键单击 + 检查就可以看到。此外,有时它会给我一个错误
Error computing item source value for page item P1_GROUP
应用程序似乎无法执行该功能,因为密码仍未初始化。
有没有办法检索 :P9999_PASSWORD 或将其从登录页面传输到全局 variable/global 页面或文本字段?或者有找回当前用户密码的功能吗?
再次感谢您抽出宝贵时间,请不要犹豫,询问更多详情,因为这是一个非常具体的案例,
托马斯
我认为你的做法不对。理想情况下,即使是系统管理员也不能解密用户的密码;它们应该存储为散列。
您正在尝试查找用户的群组成员资格?您不需要用户自己的凭据来执行此操作。 使用可以访问您的 Active Directory 系统的专用帐户,并将该密码加密存储在您的数据库中。使用该帐户搜索和查找用户的组成员身份。这样,即使您的系统遭到入侵,也只会暴露该帐户。
感谢大家对我的案例的回答和建议,以及抽出时间提供帮助。
我们找到了一个我们认为可靠的解决方案,以下是我们所做的,如果它可以帮助其他人。
我们创建了一个全局变量
G_GROUP
,它将接收用户所在的组在登录页面上,我们在登录过程之前创建了一个过程。
将进程的 Source 设置为 PL/SQL Code :
:G_GROUP := pdbadmin.ldap_get_group_apex_from_user( --our custom function to retrieve groups
p_username => :P9999_USERNAME,
p_password => :P9999_PASSWORD); -- the function get the username and password in the fields
- 如果我想在主页中显示用户组,让我们创建一个 文本字段 P1_GROUP,至于 Source PL/SQL 表达式
:G_GROUP
我们的群已初始化,密码未显示在任何字段中。
让我知道你的想法,如果你们认为这可以改进。