身份感知代理 (IAP) 是一种软件,通常作为反向代理运行,或作为结合了反向代理和负载均衡功能的软件的一部分运行。 此概念与标准架构组件的不同之处在于 IAP 在对传入请求进行身份验证方面的作用,而不是完全依赖后端系统或外部身份验证模式。
本主题几乎完全适用于 ArcGIS Enterprise,大多数 ArcGIS Online 工作流不会直接与身份感知代理交互,但可以通过这种方式保护作为项目添加到 ArcGIS Online 的外部服务或 URL。
在大多数使用反向代理或负载均衡器的部署中,该组件主要在透明模式下运行,这意味着代理不会以明显的方式编辑或更改来自客户端的请求,而是直接转发到后端系统,有时还会添加请求标头,以向后端系统指明请求是通过此代理发出的。 在这些架构中,用户通过反向代理或负载均衡器向 ArcGIS 系统进行身份验证在功能上与用户在没有此中间层的情况下直接访问软件相同。
使用 IAP 时,反向代理首先通过查找身份验证凭据或对象(例如令牌、API 密钥或特定于站点的 Cookie)来检查用户是否通过身份验证,如果不存在或无效,则对后端系统的任何请求都将立即重定向到基于 IAP 配置的身份验证提供商或进程。 只有在用户通过该身份提供商正确进行身份验证,并使用有效的安全令牌或凭据返回到 IAP 界面后,他们的请求才会转发到后端系统。 重要的是,此安全标识符在后端系统之外维护,即后端系统通常不知道用户的 IAP 协商会话。 重要的是,这意味着,在 ArcGIS Enterprise 置于 IAP 之后的情况下,在 IAP 发起初始登录后,用户需要重新验证 ArcGIS 指定的 IdP 才能与 ArcGIS 建立会话。
虽然可以配置许多不同的软件组件和系统以支持身份感知代理概念中包含的功能,但一些常见示例如下所示:
侦听器规则实际上,任何提供“预身份验证”层或需要令牌、Cookie 或其他凭据才能传递的反向代理,都可以被视为身份感知代理以用于介绍 ArcGIS 架构。 某些 IAP 或多或少是可配置的,可能允许对某些 URL 进行豁免,或者可能提供不同的身份验证方法,从简单的基于表单的登录到 OpenID Connect 和基于 SAML 的登录选项。
IAP 通常用于保护面向公众的自定义 Web 应用程序和端点,其中用户主要通过 Web 浏览器访问 Web 应用程序,并且对后端 API 的请求与应用程序位于同一域中,因此用户可以重用初始登录来发出进一步的请求。 可以开发一些后端 API,以使用通过 IAP 传递的标头或其他请求属性(如指示用户的用户名的签名),然后使用该信息来影响 API 响应内容或逻辑。
大多数 ArcGIS 客户端应用程序(无论是 Web、桌面还是基于移动设备的应用程序)都通过 OAuth 启动对 ArcGIS 的身份验证。 此过程包括向 ArcGIS 注册客户端应用程序、启动登录会话、提供有效凭据,然后使用响应代码生成令牌,这在所有客户端类型中都是一致的。 此 OAuth 登录进程涉及多个不同的网页或 HTTP 请求,并且通常发生在嵌入式浏览器(对于本机应用程序)或同一浏览器窗口(对于 Web 应用程序)中。
ArcGIS OAuth 进程,特别是在应用程序内使用生成的 ArcGIS 访问令牌,假定客户端对后端系统具有透明访问权限。 换句话说,ArcGIS 客户端只了解如何对 ArcGIS 系统进行身份验证 - 虽然浏览器中的 OAuth 进程可能包括将用户发送到 SAML 或 OIDC 身份提供者,但最终生成的 OAuth 代码是返回给用户的代码,并且本机应用程序的其他浏览器窗口将关闭。 OAuth 登录完成后,客户端希望能够将透明 HTTP 请求(包括 ArcGIS 令牌)发送到 ArcGIS Online 或 ArcGIS Enterprise 端点以供进一步使用,IDP 设置的任何凭据或会话将不再使用或被视为与 ArcGIS 相关。 在 IAP 场景中,IAP 会不断检查每个传入的请求者之前是否已经过 IAP 的身份验证,这可能会导致几个常见问题。
在 ArcGIS OAuth 登录过程中,通常通过两个已配置属性来指导如何启动 OAuth 进程:client_id 和 portal_url。
https://www.arcgis.com 或特定于组织的子域,如 https://myorg.maps.arcgis.com。https://gis.mydomain.org/portal - 包括域名和 Web 上下文 (/portal)。ArcGIS 客户端应用程序行为通常通过以下方式处理此进程:首先检查配置的 URL 是否为有效 ArcGIS Enterprise 或 ArcGIS Online 系统,然后发送类似 (portal_url) + /sharing/rest/info?f=json` 的请求
此请求返回一个简短的 JSON 响应,用于标识所用 API 版本,以确保系统是该特定客户端应用程序支持的版本。
当 ArcGIS 应用程序要求用户提供要连接的 ArcGIS Enterprise URL 时,从 ArcGIS 客户端向 /sharing/rest/info?f=json 发出的初始请求通常会返回 302 HTTP 响应,将用户重定向到 IAP 登录页面。
这会导致 ArcGIS 客户端应用程序不接受端点为有效端点,因为它不将自身表示为 ArcGIS 部署,而是表示为 HTML 登录页面。 这会导致拒绝,因为客户端应用程序正在尝试阻止恶意网站模仿 ArcGIS Enterprise 部署,例如有人使用域拼写错误技术请求信息,或要求用户在该站点中输入其凭据,以窃取和滥用这些凭据。
对于本机应用程序(包括 ArcGIS Pro 和 ArcGIS 移动应用程序),OAuth 登录是通过嵌入式浏览器完成的,虽然可以在该浏览器中成功建立 IAP 会话,但在该浏览器关闭后,通常设置的 Cookie(用于将用户标识为已通过 IAP 身份验证)将丢失,因此直接从本机应用程序发起的对 ArcGIS 的后续请求将被更新的 302 响应阻止。
如果经过精心设计,可以将多个工作流程与 IAP 功能成功结合。
虽然身份感知代理显然是一类相当常见的应用程序保护,但目前它们的实施几乎没有标准化或一致性,这使得对大量类似 IAP 的系统的支持难以可靠地实施。 Esri 正在研究未来对本机应用程序中更多基于 IAP 的工作流程的支持,并将寻求以一种普遍可实施、基于标准的方法提供支持,以在未来应用于许多不同的软件发行版。