当调用本地的arcgis server时候,用添加arcgis Identity当然,远程也是一样,不过是MapResourceManager中有用户信息,而调用本地的时候是写入web.config。而这个arcgis Identity是这样子的
添加的本地arcgis Identity
<identity configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAANCMnd8BFdERjHoAwE/Cl+sBAAAAs86ONMTifEiWf8fBiJRswQQAAAACAAAAAAAQZgAAAAEAACAAAADxAKrw6fKeMpoyPc4rzMelfbYhqElScajGsmLpYgUSXAAAAAAOgAAAAAIAACAAAAAU3r7MhH4Rlkj5cJasH4g59+1BIVSFwrC5+yWrFO9Pv5AAAABt83uB6bV3ebtdpEU69vRRRaXeZ+sO8nF/eZVptv0fb3FgEn3dYMThQF6V7iRiNYGGIQprUvJkn8Ei5bWPoYKXKvM33vYrbU/jp3xwNqFok+cAhyo4YluUbUpsvhC8F5dwTiDYrtNn31qOTjX1xla5l00+kuecpYx4lwDXBSDFEMobsZMWeL5VOyo5AAAAA6RYAWbciwyrc4wLQMS0NvHnMfJgIReCMUM86XC5+9BbgPU3uThhb30X1EZoI1lELGPustDgVVEh5mlQbfq8g==</CipherValue>
</CipherData>
</EncryptedData>
</identity>
MapResourceManager
<esri:MapResourceItem Definition="<Definition DataSourceDefinition="localhost" DataSourceType="ArcGIS Server Local" Identity="要进行设置,请右键单击项目和“添加 ArcGIS 标识”" ResourceDefinition="图层@gztest" />"
DisplaySettings="visible=True:transparency=0:mime=True:imgFormat=PNG8:height=100:width=100:dpi=96:color=:transbg=False:displayInToc=True:dynamicTiling="
LayerDefinitions="" Name="world" />
这就有一个问题,部署到服务器的时候,难道要在服务器上装一套Microsoft Visual Studio从那里面就行arcgis Identity的添加,来生成这串标识符。也不可能这么交给客户。
那怎么办呢?
那就要知道arcgis Identity在web服务器中本质是什么。其实ASP.NET 应用程序可以用发出请求的用户的 Windows 标识(用户帐户)执行。模拟通常用于依赖 Microsoft Internet 信息服务 (IIS) 来对用户进行身份验证的应用程序。
默认情况下禁用 ASP.NET 模拟。如果对某 ASP.NET 应用程序启用了模拟,该应用程序将运行在标识上下文中,其访问标记被 IIS 传递给 ASP.NET。该标记既可以是已通过身份验证的用户标记(如已登录的 Windows 用户的标记),也可以是 IIS 为匿名用户提供的标记(通常为 IUSR_MACHINENAME 标识)。
当启用模拟时,只有应用程序代码运行在被模拟的用户的上下文中。将使用 ASP.NET 进程的标识编译应用程序和加载配置信息。编译的应用程序将放在 Temporary ASP.NET files 目录中。所模拟的应用程序标识需要对该目录的读/写访问权限。所模拟的应用程序标识还需要至少对应用程序目录和子目录中的文件的读访问权限。
这就知道arcgis Identity是什么了吧。直接在IIS里面添加ASP.NET 模拟就OK。即在web.config中的<system.web>节点中添加用户添加标识
<identity impersonate="true" password="password" userName="ArcGISSOM" />
用户名和密码以明文形式存储在配置文件中。为了改进应用程序的安全性和服务器被黑后的密码安全性,建议您使用访问控制列表 (ACL) 限制对 Web.config 文件的访问,并且使用受保护的配置对 Web.config 文件中的标识配置元素进行加密。可以把密码和用户们加密用户名和密码并将它们存储在注册表中,按如下方式设置 userName 和 password 属性。
userName="registry:HKLM\Software\AspNetProcess,Name"password="registry:HKLM\Software\AspNetProcess,Pwd"
字符串中位于关键字 registry 之后和逗号之前的部分表示 ASP.NET 打开的注册表项的名称。逗号之后的部分包含一个字符串值的名称,ASP.NET 将从此名称中读取凭据。必须有逗号,并且凭据必须存储在 HKLM 配置单元中。如果配置格式不正确,则 ASP.NET 不会启动辅助进程,然后将显示造成当前帐户创建失败的代码路径。
凭据必须为 REG_BINARY 格式,并且包含 Windows API 函数 CryptProtectData 调用的输出。可以用 Aspnet_setreg.exe 来创建加密凭据,并将它们存储在注册表中。该程序使用 CryptProtectData 来完成加密。
应该对存储加密凭据的密钥的访问权限进行配置,以便仅向 Administrators 和 SYSTEM 提供访问权。由于密钥会被作为 SYSTEM 运行的 ASP.NET 进程读取,因此应设置以下权限:
-
Administrators:F
-
SYSTEM:F
-
CREATOR OWNER:F
-
ProcessAccount:R
这可以提供两道保护数据的防线,如下所示:
-
ACL 权限要求访问数据的身份是 Administrator。
-
攻击者必须在服务器上运行代码 (CryptUnprotectData API) 才能恢复帐户的凭据。