Wildfly 8.1.0.Final の使用
/api/* へのアクセスに基本認証を必要とする Web アプリを作成したいのですが、アプリケーションの残りの部分は開いておく必要があります。これを達成するために、次の web.xml があります。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<security-constraint>
<web-resource-collection>
<web-resource-name>Api access</web-resource-name>
<url-pattern>/api/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>api</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>api</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Authentication requires api access</realm-name>
</login-config>
</web-app>
ブラウザでテストすると、これは期待どおりに機能します。
http://localhost:8080/myapp/api
...認証が必要です。
http://localhost:8080/myapp
...認証を必要としません。
ここにトリッキーな部分があります:
サード パーティが /myapp にアクセスし、リクエストに認証ヘッダーを含めます。
Authorization: Basic ZGlsbDpkYWxs
これは wildfly に登録されたユーザーではありませんが、/myapp が開いており、承認を必要としないため、問題にはなりません。ただし、何が起こるかは次のとおりです。
401 Unauthorized
なんで?/myapp にセキュリティ制約を使用するように undertow に指示していませんが、/myapp/api に登録したセキュリティ制約がデフォルトになります。
Jboss AS 7.1.1.Final では発生しなかったため、これは undertow で導入された新しい動作です。
リクエストに承認が含まれている場合、オープン リソースに承認を使用しないように undertow に指示するにはどうすればよいですか?