@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')
}