Защита REST API с помощью APIKeys?

У нас есть веб-приложение Spring, защищенное с помощью Spring Security, а набор служб API SOAP использует тот же домен безопасности @org.jboss.ejb3.annotation.SecurityDomain, который Spring MVC использует для аутентификации пользователей.

Сейчас мы находимся в процессе реорганизации нашего приложения и создания безопасных API REST. Мы думали следовать нижеприведенному подходу

  • Методы Spring @RestController действуют как REST APIS / webservices для замены наших существующих API-интерфейсов мыла.
  • Spring OAuth2 для защиты REST API
  • Spring MVC продолжает использовать безопасность Spring и домен безопасности, определенный на сервере wildfly, и после входа в форму после авторизации пользователя из javascript/angular js используйте маркер доступа oauth для вызова защищенных API REST.

Конфигурация пружины

<http pattern="/restapi/**" entry-point-ref="oauthAuthenticationEntryPoint"
    create-session="stateless" xmlns="http://www.springframework.org/schema/security"
    use-expressions="true">
    <anonymous enabled="false" />
    <access-denied-handler ref="oauthAccessDeniedHandler" />
    <intercept-url pattern="/restapi/**" access="isAuthenticated()" />
    <remember-me key="myapp" services-ref="rememberMeServices" />
    <custom-filter ref="jbossSecurityFilter" after="REMEMBER_ME_FILTER" />
    <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
</http>

<http pattern="/oauth/token" create-session="stateless"
    use-expressions="true" authentication-manager-ref="authenticationManager">
    <intercept-url pattern="/oauth/token" access="isAuthenticated()" />
    <anonymous enabled="false" />
    <custom-filter ref="clientCredentialsTokenEndpointFilter"
        before="BASIC_AUTH_FILTER" />
    <access-denied-handler ref="oauthAccessDeniedHandler" />
    <http-basic entry-point-ref="clientAuthenticationEntryPoint" />
    <remember-me key="myapp" services-ref="rememberMeServices" />
    <custom-filter ref="jbossSecurityFilter" after="REMEMBER_ME_FILTER" />
</http>

<beans:bean id="jaasAuthenticationProvider"     class="org.springframework.security.authentication.jaas.JaasAuthenticationProvider">
              <beans:property name="refreshConfigurationOnStartup" value="false"/> 
              <beans:property name="loginConfig" value="/WEB-INF/login.conf" />
              <beans:property name="loginContextName" value="AppName" />
              <beans:property name="callbackHandlers">
                 <beans:list>
                    <beans:ref bean="jaasNameCallBackHandler" />
                    <beans:bean class="org.springframework.security.authentication.jaas.JaasPasswordCallbackHandler" />
                 </beans:list>
              </beans:property>
              <beans:property name="authorityGranters">
                 <beans:list>
                    <beans:bean class="com.custom.CustomAuthorityGranter" />
                 </beans:list>
              </beans:property>
           </beans:bean>

Сторонние приложения или клиенты REST API будут использовать следующие шаги для получения токенов доступа и доступа к защищенным API REST.

Http: // имя хоста: 8080 / MyApp / OAuth / маркер grant_type = пароль и client_id = X & имя пользователя = user1 и пароль = секрет & client_secret = XYZ & сфера = чтение + запись + доверие?

http://hostname:8080/myapp/restapi/getdata?access_token=5ec70b18-d9eb-449b-a1fa-d29c3d47274d

Безопасно ли просить наших клиентов веб-сервисов отправлять свои учетные данные в параметре / заголовках запроса для получения токенов доступа?

Это хороший подход для сохранения токенов в сеансах сервера, чтобы использовать его в пользовательском интерфейсе для запросов Spring MVC?

Нас также просят рассмотреть ключи API для доступа к API REST. С помощью API-ключей мы можем получить контекст сеанса ejb и информацию о пользователе? Если да, можем ли мы использовать API-ключи вместе с пружинной защитой в веб-части?

0 ответов

Другие вопросы по тегам