【发生条件】
使用Kerberos身份验证时发生。
【原因】
Internet Explorer(IE)进行Kerberos身份验证时失败。
【解决方法】
首先,前提是在Internet Information Services(IIS)中将静态内容设置为返回。
使用集成Windows身份验证时,此设置是必须的。请参阅以下的URL进行设置。
・IM-Workflow的申请画面、workflowOpenPage等仅特定的URL发生401错误时
请使用请求日志或浏览器开发工具等来确定发生HTTP 401错误的请求(URL)。
例如,发生401错误的URL是“/im_workflow/common/session_timeout_check/session_timeout_check”时,新建 WEB-INF/conf/im-sso-windows-path-config/{任意文件名}.xml文件,在<no-authentication> 标签下添加 <path regex="false">/im_workflow/common/session_timeout_check/session_timeout_check</path>。
其他,例如以下的URL“/im(5f)workflow(2f)common(2f)session(5f)timeout(5f)check(2f)session(5f)timeout(5f)check.jssps”发生401错误,同样在<no-authentication>标签下添加<path regex="false">/im(5f)workflow(2f)common(2f)session(5f)timeout(5f)check(2f)session(5f)timeout(5f)check.jssps</path>。
设置示例请参阅附件的im-sso-windows-path-config_disable_auth.xml。其他请求发生401错误时,请同样对该URL添加<path>标签。不会对此文件中添加的URL进行集成Windows身份验证,而是进行通常的AccelPlatform验证。
有关im-sso-windows-path-config,请参阅集成Windows身份验证路径设置。
其次、请将添加的ConstantConfigBasedWindowsTenantIdResolver.java放置到 WEB-INF/classes/jp/co/intra_mart/foundation/admin/tenant/context目录下。
最后,按以下更改WEB-INF/plugin/jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolver.windows_8.0.1/plugin.xml的内容。
更改前
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<extension point="jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolvers">
<tenant-id-resolvers
id="jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolver.windows"
name="Windows Tenant Id Resolver"
version="8.0.1"
rank="90">
<!-- 将Domain作为TenantID的解析器
将加入的Domain作为TenantID来解析。 -->
<!--tenant-id-resolver class="jp.co.intra_mart.foundation.admin.tenant.context.DomainBasedWindowsTenantIdResolver"/-->
<!-- 将设置的固定值作为TenantID的解析器
将tenant_id参数中设置的值作为TenantID来解析。 -->
<!--tenant-id-resolver class="jp.co.intra_mart.foundation.admin.tenant.context.FixedConfigBasedWindowsTenantIdResolver">
<init-param>
<param-name>tenant_id</param-name>
<param-value>default</param-value>
</init-param>
</tenant-id-resolver-->
</tenant-id-resolvers>
</extension>
</plugin>
更改后
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<extension point="jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolvers">
<tenant-id-resolvers
id="jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolver.windows"
name="Windows Tenant Id Resolver"
version="8.0.1"
rank="90">
<!-- 将Domain作为TenantID的解析器
将加入的Domain作为TenantID来解析。 -->
<!--tenant-id-resolver class="jp.co.intra_mart.foundation.admin.tenant.context.DomainBasedWindowsTenantIdResolver"/-->
<!-- 将设置的固定值作为TenantID的解析器
将tenant_id参数中设置的值作为TenantID来解析。 -->
<tenant-id-resolver class="jp.co.intra_mart.foundation.admin.tenant.context.ConstantConfigBasedWindowsTenantIdResolver">
<init-param>
<param-name>tenant_id</param-name>
<param-value>default</param-value>
</init-param>
</tenant-id-resolver>
</tenant-id-resolvers>
</extension>
</plugin>
请按实际情况更改文件中TenantID的“default”。
・不特定的URL发生401错误时
可能是Kerberos身份验证时发生的问题。
去除Internet Explorer(IE)的“工具”-“Internet 选项”的“详细设置”标签中“安全”的“使用集成Windows身份验证”的选项。
这样将使用NTLM身份验证替代Kerberos身份验证。
本公司已确认Firefox ESR 31.7默认使用的是NTLM身份验证,因此,请使用它来区分是否是Kerberos身份验证引起的问题。
另外,已确认Chrome 43.0.2357.81 m 及之后版本和Internet Explorer(IE)一样,默认使用的是Kerberos身份验证而不是NTLM身份验证,因此,请使用它来区分是否是浏览器引起的验证问题。
另外,使用集成Windows身份验证模块的版本是8.0.1_PATCH-001及之后版本、8.0.2_PATCH-001及之后版本、8.0.3_PATCH-001及之后版本的情况下,通过在conf\im-sso-windows-config.xml中添加以下设置,不用更改上述的Internet Explorer(IE)的设置就可以强制使用NTLM身份验证。
<parameter>
<param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name>
<param-value>NTLM</param-value>
</parameter>
-- 适用对象 ----------------------------------------------------------------
iAP/Accel Platform/2014 Spring(Granada)及之后版本
--------------------------------------------------------------------------------
FAQID:532
使用集成Windows身份验证模块(2014 Spring 及之后版本)时,发生“401(Unauthorized)”和“12015 Unknown”的错误。