Сервер свободы: isUserInRole всегда возвращает false

#security #jax-rs #websphere-liberty

Вопрос:

У меня есть приложение JaxRS 2.0 EAR, развернутое на сервере Liberty Server 20.0.0.9

Я прочитал всю возможную документацию и все вопросы по stackoverflow, но не нашел никакого решения.

У меня есть API, защищенный ролями аннотаций, но при вызове я всегда получал 403 Http-кода.

Это моя конфигурация:

web.xml

 <!-- SECURITY ROLES -->
<security-role><role-name>Pippo</role-name></security-role>
<security-role><role-name>LOYALTY_ADMINISTRATOR</role-name></security-role>
<security-role><role-name>cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT</role-name></security-role>

<!-- SECURITY CONSTRAINTS -->
<security-constraint>
    <display-name>Test Back Office Constraint</display-name>
    <web-resource-collection>
        <web-resource-name>Test Back Office</web-resource-name>
        <url-pattern>/testbo/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Pippo</role-name>
        <role-name>LOYALTY_ADMINISTRATOR</role-name>
        <role-name>cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT</role-name>
    </auth-constraint>
</security-constraint>

<!-- AUTHENTICATION METHOD: Basic authentication -->
<login-config>
    <auth-method>MP-JWT</auth-method>
</login-config>
 

ibmapplication-bnd.xml

 <security-role name="AllAuthenticated">
     <special-subject type="ALL_AUTHENTICATED_USERS" />
</security-role>
<security-role name="Pippo">
    <group name="cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT" />
</security-role>
<security-role name="LOYALTY_ADMINISTRATOR">
    <group name="cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT" />
</security-role>
<security-role name="cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT">
    <group name="cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT" />
</security-role>
 

Класс приложения

 @LoginConfig(authMethod = "MP-JWT")

@ApplicationPath("website")
public class WebsiteApplication extends Application {
 

Мой Api

 @ApplicationScoped
@DeclareRoles({"Pippo", "LOYALTY_ADMINISTRATOR", "cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT"})
public class BackOfficeApiTestResource extends BaseApiResource implements BackOfficeTestApi {

    @Override
    @RolesAllowed("cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT")
    public void test1() throws Exception {
        System.out.println("test 1 called");
    }
    
    @Override
    @RolesAllowed("LOYALTY_ADMINISTRATOR")
    public void test2() throws Exception {
        System.out.println("test 1 called");
    }
    
    @Override
    @RolesAllowed("Pippo")
    public void test3() throws Exception {
        System.out.println("test 2 called");
    }
}
 

Содержимое токена JWT

 {
  "sub": "btelefonicacv",
  "token_type": "Bearer",
  "scope": [
    "api"
  ],
  "jti": "6JBgVnsl7s1eaI3v",
  "iss": "https://localhost:9445/oidc/endpoint/OP",
  "exp": 1617289174,
  "iat": 1617281974,
  "givenName": "MARIO",
  "sn": "ROSSI",
  "cn": "MARIO ROSSI",
  "groups": [
    "cn=LOYALTY_ADMINISTRATOR,ou=Groups,O=MYCOMPANY,C=IT"
  ],
  "upn": "uid=btelefonicacv,ou=People,O=MYCOMPANY,C=IT"
}
 

Любая помощь будет признательна

Спасибо

Комментарии:

1. Какие функции вы используете (например, с вашего server.xml файл)?

2. <FeatureManager> <FeatureManager><функция>микроПрофиль-3.2<функция></функция> </функция><функция> < функция > usr:opentracingJaeger-0.33.1<функция></функция> </функция><функция>Локальный коннектор-1.0<функция></функция> </функция></функция > < / FeatureManager>

3. Я предполагаю, что вам нужно добавить <feature>appSecurity-3.0</feature> , но я передам этот вопрос дальше.

4. Правильно ли у вас <mpJwt > настроен элемент? Также проверьте message.log наличие конкретных ошибок, так как это может предоставить вам дополнительную информацию о причинах сбоя. Вы также можете попробовать добавить информацию о привязке к server.xml вместо файла ibm-application-bnd.

5. Я думаю, что мой mpJwt настроен правильно. <mpJwt id=»picoMpJwt» issuer=» localhost:9445/oidc/endpoint/OP » jwksUri=» localhost:9445/oidc/endpoint/OP/jwk » sharedKey=»password» signatureAlgorithm=»HS256″ /> В документации я обнаружил, что я могу настроить привязку объекта недвижимости в server.xml только для войны. В моем случае у меня есть файл для УШЕЙ