Я предполагаю, что порт <C>
является HTTP, и поскольку вы настроили <transport-guarantee> CONFIDENTIAL </transport-guarantee>
, следовательно, порт <C>
заблокирован.
Порт <B>
использует SSL, который удовлетворяет <transport-guarantee> CONFIDENTIAL </transport-guarantee>
, следовательно, он не заблокирован.
.
Вам не хватает нескольких элементов в конфигурации web.xml. У вас нет каких-либо ограничений авторизации на ваших веб-ресурсах. Следовательно, когда вы получаете доступ из порта <B>
, даже если вы не прошли аутентификацию, вы по-прежнему имеете право доступа к ресурсам, поскольку вы не налагали никаких ограничений на аутентификацию для своих ресурсов.
У вас должен быть список <security-role>
, содержащий <role-name>
, который может получить доступ к этому приложению.
<security-constraint>
для <web-resource-collection>
должен иметь <auth-constraint>
с указанием, к кому <role-name>
будет предоставлен доступ, а другим будет запрещено.
Роли, настроенные выше, являются ролями Java EE. Контейнер (JBoss) необходимо настроить для сопоставления аутентифицированных ролей с ролями Java EE.
Ссылка:
http://java.sun.com/javaee/5/docs/tutorial/doc/bncbe.html
http://community.jboss.org/wiki/RoleMappingLoginModule
.
Обновленная копия вышеуказанного web.xml
<!-- Force SSL for entire site as described here: http://wiki.metawerx.net/wiki/ForcingSSLForSectionsOfYourWebsite -->
<security-constraint>
<!-- defines resources to be protected (in this case everything)-->
<web-resource-collection>
<!-- name for the resource, can be anything you like -->
<!-- Question: is this referenced anywhere else? -->
<web-resource-name>
Entire Application
</web-resource-name>
<!-- protect the entire application -->
<url-pattern>
/*
</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Authorized Roles</description>
<role-name>ALL_AUTHENTICATED</role-name>
</auth-constraint>
<!-- defines protection level for protected resource -->
<user-data-constraint>
<!-- data cannot be observed or changed -->
<!-- how it works in tomcat: -->
<!-- if (set to integral or confidential && not using ssl) -->
<!-- redirect sent to client, redirecting them to same url -->
<!-- but using the port defined in the redirect port -->
<!-- attribute in the <Connector> element of server.xml -->
<!-- default is 443, so in other words user is redirected -->
<!-- to same page using ssl. -->
<!-- BUT it is differnt for JBOSS!! See this link: http://wiki.metawerx.net/wiki/ForcingSSLForSectionsOfYourWebsite -->
<transport-guarantee>
CONFIDENTIAL
</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<!-- Client-side SSL certificate based authentication. The cert is passed to the server to authenticate -->
<!-- I am pretty sure that CLIENT-CERT should have a dash NOT an underscore see: http://www.mail-archive.com/tomcat-user@jakarta.apache.org/msg139845.html -->
<!-- CLIENT-CERT uses a client's AND server's certificates. See: http://monduke.com/2006/01/19/the-mysterious-client-cert/ -->
<auth-method>
CLIENT-CERT
</auth-method>
</login-config>
<security-role>
<description>All authenticated users</description>
<role-name>ALL_AUTHENTICATED</role-name>
</security-role>
.
В безопасности есть две вещи, аутентификация и авторизация.
Аутентификация: акт проверки того, что пользователь является субъектом и предоставления пользователю определенных принципов; "кто ты."
Авторизация: акт проверки того, что пользователю разрешен доступ к определенному ресурсу; "что вы можете сделать."
<auth-method>
расскажите, как аутентифицировать пользователя или как спросить, кто вы. Если у пользователя нет сертификата клиента, он является неаутентифицированным пользователем. Он не говорит, что может делать пользователь.
Однако <auth-constraint>
- это то, что вы можете сделать. Если вы введете <auth-constraint>
, то только роли, упомянутые там, могут получить доступ к соответствующему веб-ресурсу У вас все еще может быть пользователь, который не аутентифицирован, но авторизован для доступа к определенным ресурсам, если ресурсы не ограничены определенными ролями.