apex 如何从一个应用程序中的链接登录到另一个应用程序?
Posted
技术标签:
【中文标题】apex 如何从一个应用程序中的链接登录到另一个应用程序?【英文标题】:apex how to login to another application from link in one application? 【发布时间】:2014-05-13 08:57:23 【问题描述】:我的工作区中有两个应用程序,APP 1 和 APP 2。
在我的情况下,用户将登录到 APP 1。从那里,我将菜单(或链接)放置到 APP 2。但是 APP 2 需要身份验证。所以它会带我到一个登录页面。我想消除它并在 APP 1 上获取当前用户的凭据并登录到 APP 2。
我正在寻找一种简单直接的方法(但需要考虑安全性)来登录 APP 2。
我能想到的是apex_collection
..我可以存储凭据并使用它为 APP 2 创建登录过程。但是apex_collection
是基于会话的。即使我已经为 APP 2 设置了会话,它仍然不会从我的apex_collection
中读取值。
有人有建议或解决方案吗?
【问题讨论】:
【参考方案1】:您需要做的就是在两个应用程序中使用相同的身份验证方案,并将两个身份验证方案中的 cookie name 属性设置为相同的值,如下所示:
然后,APEX 将在两个应用程序中使用相同的会话,并且用户在从一个应用程序导航到另一个应用程序时不必再次登录,当然前提是您在 URL 中传递了 SESSION_ID。
【讨论】:
【参考方案2】:关于默认 APEX 工作区身份验证安全性的几点评论
进一步解释@TonyAndrews 发布的解决方案为何有效也可能会有所帮助。
对于同一工作区中的任何 Apex 应用程序,如果它们使用默认的“APEX 应用程序身份验证”方法,它们将查阅相同的身份验证用户列表...所以USER1
及其密码是任何“相邻”应用程序...
如果您托管不应该与其他应用程序混合的不同客户端或用户,这可能是一个问题。您还可以在设置每个工作区用户的同一位置定义用户 GROUPS
。每个应用程序都可以有自己的安全过滤器,允许通过用户/密码身份验证的成员身份和相应访问组中的成员身份进行访问。
由于单个工作区的唯一用户名限制,共享工作区也可能是个问题。您可以通过以下方式解决此问题:
为每个应用定义不同的命名空间:
-
电子邮件地址很好:“someuser@sampledomain.com”
应用 ID 前缀,例如:SHOP_EDNA、SHOP_GARRETT、TC_KAREN、TC_MARLOWE、MY_BORIS 等。
不同的名称样式:仅名字、名字+姓氏首字母等。
为简单起见,您始终可以启动一个全新的工作区:但警告是,像“ADMIN”这样的常见用户名在不同的工作区之间是不一样的。不过不必担心,因为应用程序或工作区用户可能对数据库后端拥有相同或不同的架构访问权限。
对管理员和开发人员的警告:
当您在面向用户的系统上使用一个或多个应用程序时,请记住部署目标(即工作区)以及共享该工作区的其他内容。在某些实际情况下,其他“内部”用户不打算共享或访问应用程序。请务必阅读并了解使用Default Apex Authentication
安全性的安全约束和方法,这样才能保护您自己的生产/实时部署的应用程序不仅仅是运气。
【讨论】:
【参考方案3】:我确实有类似的要求,从一个应用程序页面链接到另一个。 尝试了上述解决方案,但仍然要求登录第二个应用程序。我的 Apex 版本是 5.0.3 并在同一个工作区中尝试。
-
为具有相同 cookie 名称的每个应用程序创建了新的身份验证方案,并将它们设置为当前身份验证。方案类型是 Application Express 帐户。
将链接设置如下,从第一个应用页面到第二个。
href="http://servername:port/apex/f?p=224:2:&APP_SESSION"
请问谁能提供解决方案?
【讨论】:
【参考方案4】:只是对此的更新。 我目前使用的是 v21.2,我就是这样做的:
-
在这两个应用程序中,转到共享组件 > 身份验证方案 >(选择您的身份验证方案);
向下滚动到会话共享并选择“工作区共享”;
在其中一个应用程序(源)中,创建一个链接(例如,作为导航栏列表条目),例如
f?p=173:1:&SESSION.
,其中 173 是目标应用程序 ID,1 是目标页面。
经过一番研究,我发现这个功能(会话共享类型)从 APEX v18 开始可用。
【讨论】:
以上是关于apex 如何从一个应用程序中的链接登录到另一个应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ui5 应用程序注销并重定向到另一个 ui5 应用程序登录?
Oracle Apex 页面在导航到另一个页面并返回后无法获取数据