Авторизация клиента OAuth2 с аутентификацией на основе форм в SpringBoot - PullRequest
0 голосов
/ 26 сентября 2018

@EnableOAuth2Client, кажется, автоматически создает пользователя, получая данные пользователя из предоставленного user-info-uri.Мне нужен oauth2 только для делегирования авторизации.Часть аутентификации обрабатывается приложением из-за необходимости.Все учебники Spring Security, за которыми я следовал, сосредоточены на использовании oauth2 для аутентификации и авторизации.С моим ограниченным знанием Spring я не могу предоставить настраиваемую конфигурацию Spring Security для использования oauth2 только для делегирования авторизации.Как настроить Spring Security, чтобы не использовать oauth2 для входа в систему, а только для получения токена доступа?

Чтобы обеспечить больше контекста, для моего университетского проекта мне нужно создать веб-приложение промежуточного программного обеспечения A1, которое должно выполнить некоторые авторизованные действия в некоторых существующих веб-приложениях A2 (например, NextCloud, Moodle ...) от имени пользователя U (U является зарегистрированным пользователем в A1 и A2) A1 разрабатывается с использованием SpringBoot и Spring Security.

Ниже приведен сценарий, который я хочу реализовать.

1) Пользователь U входит в А1, используя аутентификацию на основе форм

2) В А1 есть страница с кнопкойзапустить один раз поток oauth2 (нажатие кнопки перенаправит на сервер авторизации A2, где U авторизует и авторизует A1)

3) При успешной авторизации A2 отправляет код авторизации в A1

4) A1 получает токен доступа от A2, используя полученный код авторизации

5) A1 затем использует токен доступа для выполнения авторизованного действия в A2 от имени U.

Любая помощь оченьприветствуется.

Ниже приведены некоторые выдержки из кода.

application.yml

spring:
  security:
    oauth2:
      client:
        registration:
          nextcloud:
            client-id: <the id>
            client-secret: <the secret>
            redirect-uri-template: "{baseUrl}/login/oauth2/code/{registrationId}"
            authorization-grant-type: authorization_code
            client-name: NextCloud
            scope: read, write
        provider:
          nextcloud:
            authorization-uri: http://localhost:8090/nextcloud/index.php/apps/oauth2/authorize
            token-uri: http://localhost:8090/nextcloud/index.php/apps/oauth2/api/v1/token
            user-infor-uri: http://localhost:8090/nextcloud/index.php/ocs/v1.php/cloud/users/{userId}

IworkflowsApplication.java

@SpringBootApplication
@EnableOAuth2Client
public class IworkflowsApplication {

    public static void main(String[] args) {
        SpringApplication.run(IworkflowsApplication.class, args);
    }
}

gradle.build

buildscript {
    ext {
        springBootVersion = '2.0.5.RELEASE'
    }

...

dependencies {
    compile('org.springframework.boot:spring-boot-starter-actuator')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-thymeleaf')
    compile 'org.thymeleaf.extras:thymeleaf-extras-springsecurity4'
    compile('org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.5.RELEASE')
//    compile('org.springframework.security:spring-security-oauth2-jose')
    compile('org.springframework.security:spring-security-oauth2-client')
    compile('org.projectlombok:lombok')
    runtime('org.springframework.boot:spring-boot-devtools')
    runtime('com.h2database:h2')
    runtime('mysql:mysql-connector-java')
    compileOnly('org.projectlombok:lombok')
    testCompile('org.springframework.boot:spring-boot-starter-test')
//    testCompile('org.springframework.boot:spring-security-test')
}
...