在SpringBoot中使用基于表单的身份验证进行OAuth2客户端授权

时间:2018-09-26 18:14:35

标签: spring-security oauth-2.0 integration spring-oauth2 nextcloud

@EnableOAuth2Client似乎可以通过从提供的user-info-uri获取用户详细信息来自动创建用户。我只需要oauth2来委派授权。身份验证部分根据需要由应用程序内部处理。我遵循的所有Spring Security教程都集中于使用oauth2进行身份验证和授权。凭借有限的Spring知识,我无法提供定制的Spring Security配置以仅将oauth2用于委派授权。如何将Spring Security配置为不使用oauth2登录,而仅用于获取访问令牌?

要提供更多上下文,对于我的大学项目,我需要构建一个集成中间件Web应用程序A1,该应用程序需要在某些现有Web应用程序A2(例如NextCloud,Moodle)中执行一些授权操作。 ..)代表用户UUA1A2的注册用户) 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')
}

0 个答案:

没有答案