ArcGIS Server 使用基于令牌的访问控制系统。 用户完成身份验证后,就会向客户端应用程序发出访问令牌。 当用户需要访问受保护的服务或执行管理任务时,客户端应用程序会发送访问令牌,ArcGIS Server 将根据该服务的权限或该用户的权限来确定是否授予对该服务或管理任务的访问权限。
令牌属性
以下部分讨论了 ArcGIS 令牌的重要属性。
令牌的生命期
要维护令牌的安全性,每个令牌都需要相关联一个有效期。 如果使用过期令牌,最终用户可能会看到超时或其他错误消息。
有效期较短的令牌更安全,因为恶意用户拦截的令牌只能在较短的时间内使用。 但是,到期时间越短,应用程序将需要更频繁地请求新令牌。
以下两个参数定义了已发布令牌的生命期:
- 短期令牌的生命期 - 如果客户端在请求令牌时不指定超时值,则发布短期令牌。 所发布的令牌仅在此属性定义的期间内有效。 如果客户端在请求令牌时指定的超时值小于短期令牌的生命期设置,则发布具有所请求的过期值的令牌。
- 长期令牌的生命期 - 如果客户端在请求令牌时指定了超时值,则对请求的超时值与该属性定义的期间进行比较。 如果请求的超时值小于长期令牌的生命期,则发布具有所请求的超时值的令牌。 如果请求的超时值超过长期令牌的生命期设置,则仍会发布令牌,但其有效期将与这一属性相匹配。
共享密钥定义
ArcGIS 令牌是加密信息字符串。 共享密钥是用于生成此加密字符串的密钥。 共享密钥越复杂,恶意用户越难解密和破译共享密钥。 如果用户能够破译共享密钥,复制 ArcGIS Server 的加密算法,并获取授权用户的列表,该用户将能够生成令牌,并使用此特定 ArcGIS Server 中的任何受保护资源。
在定义共享密钥之前,请考虑以下事项:
- 共享密钥的长度应为 16 个字符(超出 16 个字符的任何字符均不会采用)。 建议使用随机字符序列作为密钥。 任何字符都可以使用,包括非字母数字字符。
- 不应将密钥设为字典中的单词或容易猜出的常用值。 由于无需记住密钥或在其他位置使用该密钥,因此设置密钥与设置密码不同,复杂的密钥值并不会对用户造成不便。
- 可使用高级加密标准 (AES) 通过共享密钥对令牌加密,该标准也称作 Rijndael。 密钥中的 16 个字符表示用于加密的 128 位。 有关加密和 AES 的详细信息,请查阅安全性参考资料,或咨询组织内具有安全性和密码学专业知识的人员。
- 在高度安全的环境中,建议定期更改共享密钥。 切记,如果更改共享密钥,可能需要更新应用程序才能使用新的共享密钥。 一旦更改共享密钥,现有的全部嵌入式令牌都将变得无效。
令牌的安全传输
为了防止拦截和错误使用令牌,建议使用采用 HTTPS 的安全连接。 使用 HTTPS 可确保恶意用户无法拦截客户端发送的用户名和密码以及 ArcGIS Server 返回的令牌。
在构建使用 GET 请求访问 Web 服务(这些服务受基于 ArcGIS 令牌的身份验证保护)的自定义 ArcGIS 客户端应用程序时,建议使用 X-Esri-Authorization 令牌头而非查询参数来发送令牌。 这可以防止网络中介(如代理、网关或负载均衡器)获取令牌。 以下是 HTTP GET 请求以 X-Esri-Authorization 令牌头发送令牌的示例:GET https://arcgis.mydomain.com/arcgis/rest/services/SampleWorldCities/MapServer?f=pjson HTTP/1.1
Host: arcgis.mydomain.com
X-Esri-Authorization: Bearer xMTuPSYpAbj85TVfbZcVU7td8bMBlDKuSVkM3FAx7zO1MYD0zDam1VR3Cm-ZbFo-
如果 ArcGIS Server 使用 ArcGIS Server 身份验证而非 Web 层身份验证(IWA、HTTP BASIC、PKI 等),则可以使用标准 HTTP 授权令牌头代替 X-Esri-Authorization 令牌头:GET https://arcgis.mydomain.com/arcgis/rest/services/SampleWorldCities/MapServer?f=pjson HTTP/1.1
Host: arcgis.mydomain.com
Authorization: Bearer xMTuPSYpAbj85TVfbZcVU7td8bMBlDKuSVkM3FAx7zO1MYD0zDam1VR3Cm-ZbFo-