ArcGIS Server 提供了一种基于令牌的专有身份验证机制,使用户能够通过提供令牌而不是用户名与密码来进行自我身份验证。ArcGIS 令牌是包含用户名、令牌有效期和某些专有信息的加密信息字符串。要获得令牌,用户需要提供有效的用户名和密码。ArcGIS Server 会验证提供的凭据并发布令牌。用户在访问受保护资源时提供此令牌。
令牌属性
令牌的生命期
要维护令牌的安全性,每个令牌都需要相关联一个有效期。如果使用过期令牌,最终用户可能收到超时或其他错误消息。
有效期较短的令牌更安全,因为恶意用户拦截的令牌只能在较短的时间内使用。但是,短有效期意味着应用程序需要更频繁地请求新令牌。
以下两个参数定义了已发布令牌的生命期:
- 短期令牌的生命期:如果客户端在请求令牌时不指定超时值,则发布短期令牌。所发布的令牌仅在此属性定义的期间内有效。如果客户端在请求令牌时指定的超时值小于短期令牌的生命期设置,则发布具有所请求的有效期的令牌。
- 长期令牌的生命期:如果客户端在请求令牌时指定了超时值,则对请求的超时值与该属性定义的期间进行比较。如果请求的超时值小于长期令牌的生命期,则发布具有所请求的有效期的令牌。如果请求的超时值超过长期令牌的生命期设置,则仍会发布令牌,但其有效期将与这一属性相匹配。
定义共享密钥
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-