@EnableOAuth2Client
似乎可以通过从提供的user-info-uri
获取用户详细信息来自动创建用户。我只需要oauth2来委派授权。身份验证部分根据需要由应用程序内部处理。我遵循的所有Spring Security教程都集中于使用oauth2进行身份验证和授权。凭借有限的Spring知识,我无法提供定制的Spring Security配置以仅将oauth2用于委派授权。如何将Spring Security配置为不使用oauth2登录,而仅用于获取访问令牌?
要提供更多上下文,对于我的大学项目,我需要构建一个集成中间件Web应用程序A1
,该应用程序需要在某些现有Web应用程序A2
(例如NextCloud,Moodle)中执行一些授权操作。 ..)代表用户U
(U
是A1
和A2
的注册用户)
A1
正在使用SpringBoot和Spring Security开发。
以下是我要实现的方案。
1)用户U使用基于表单的身份验证登录到A1
2)A1中有一个页面,其中有一个按钮可以启动一次oauth2流(单击该按钮将重定向到U2登录并授权A1的A2的授权服务器)
3)授权成功后,A2将授权码发送给A1
4)A1使用收到的授权码从A2获取访问令牌
5)然后,A1使用访问令牌代表U在A2中执行某些授权操作。
非常感谢您的帮助。
以下是该代码的一些摘录。
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')
}