【発生条件】
ケルベロス認証を利用している場合に発生します。
【原因】
Internet Explorer(IE)がケルベロス認証に失敗するため。
【回避方法】
まず前提として、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">
<!-- ドメインをテナントIDとするリゾルバー
参加しているドメインをテナントIDとして解決します。 -->
<!--tenant-id-resolver class="jp.co.intra_mart.foundation.admin.tenant.context.DomainBasedWindowsTenantIdResolver"/-->
<!-- 設定された固定値をテナントIDとするリゾルバー
tenant_idパラメータに設定した値をテナントIDとして解決します。 -->
<!--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">
<!-- ドメインをテナントIDとするリゾルバー
参加しているドメインをテナントIDとして解決します。 -->
<!--tenant-id-resolver class="jp.co.intra_mart.foundation.admin.tenant.context.DomainBasedWindowsTenantIdResolver"/-->
<!-- 設定された固定値をテナントIDとするリゾルバー
tenant_idパラメータに設定した値をテナントIDとして解決します。 -->
<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>
ファイル中のテナントIDの「default」は適宜変更してください。
・不特定の URL において 401 になる場合
ケルベロス認証において問題が発生している可能性があります。
Internet Explorer(IE)の「ツール」-「インターネット オプション」の「詳細設定」タブ中の「セキュリティ」セクションにある「統合 Windows 認証を利用する」のチェックを外してください。
これによりケルベロス認証の代わりに、NTLM 認証が行われるようになります。
弊社で確認したところ、Firefox ESR 31.7 では NTLM 認証がデフォルトで行われるため、ケルベロス認証による問題かどうかの切り分けにご利用ください。
また、Chrome は 43.0.2357.81 m 以降より Internet Explorer(IE)と同様に 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」エラーが発生します。