Указанный URI перенаправления недействителен.

Я пытаюсь использовать GitLab OAuth2 с Spring Boot, но постоянно получаю:

перенаправленный uri недействителен

Я уже зарегистрировал приложение в GitLab.

Вот мой application.yml

security:
  oauth2:
   client:
     clientId: CLIENT_ID
     clientSecret: CLIENT_SECRET
     userAuthorizationUri: https://gitlab.your-domain.com/oauth/authorize
     accessTokenUri: https://gitlab.your-domain.com/oauth/token
     registered-redirect-uri:
     #- http://localhost:8080/login/oauth2/code/gitlab
     - http://localhost:8080
     tokenName: oauth_token
     authenticationScheme: query
     clientAuthenticationScheme: form
   resource:
     userInfoUri: https://gitlab.your-domain.com/api/v4/user

и простой класс Spring REST:

@SpringBootApplication
@EnableOAuth2Sso
@RestController
public class DemoApplication extends WebSecurityConfigurerAdapter {

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

    @RequestMapping("/user")
    public Principal user(Principal principal) {
        return principal;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .antMatcher("/**")
            .authorizeRequests()
                .antMatchers("/", "/login**", "/webjars/**", "/error**").permitAll()
                .anyRequest().authenticated()
                .and()
            .logout()
                .logoutSuccessUrl("/")
                .permitAll();
    }
}

Наконец, файл index.html:

<body>
<h1>Demo</h1>
<div class="container unauthenticated">
    With GitLab: <a href="/login/gitlab">click here</a>
</div>
<div class="container authenticated" style="display: none">
    Logged in as: <span id="user"></span>
    <div>
        <button onClick="logout()" class="btn btn-primary">Logout</button>
    </div>
</div>

<script type="text/javascript">
    $.get("/user", function(data) {
        $("#user").html(data.userAuthentication.details.name);
        $(".unauthenticated").hide()
        $(".authenticated").show()
    });
    var logout = function() {
        $.post("/logout", function() {
            $("#user").html('');
            $(".unauthenticated").show();
            $(".authenticated").hide();
        })
        return true;
    }
</script>
</body>

Я могу войти в GitLab, и авторизация также проходит успешно, наконец, когда дело дошло до перенаправления на базовый URL:

 http://localhost:8080 

он говорит, что URL-адрес перенаправления недействителен.

Вот мой POM.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.learning</groupId>
    <artifactId>spring-oauth-gitlab-demo-app</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <!-- <version>2.1.1</version> -->
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <!-- <version>3.2.0</version> -->
            <version>4.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>webjars-locator-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

person A.s    schedule 06.06.2019    source источник
comment
Ваш URL-адрес перенаправления localhost:8080 в yaml. И вы перенаправляетесь на localhost:8080/user. Это то, что вы хотите?   -  person don    schedule 06.06.2019
comment
/user является последней конечной точкой, здесь опечатка, я отредактирую ее.. спасибо, но все же, даже если я помещу ее на localhost:8080/, я столкнусь с той же проблемой. Есть ли какие-либо другие проблемы, которые вы можете решить в коде?   -  person A.s    schedule 06.06.2019
comment
@dur я также добавляю pom.xml сюда, и да, мой URL-адрес перенаправления такой же, как у gitlab .. но я понял, что Spring автоматически определяет URL-адрес перенаправления как localhost:8080/login , независимо от того, сколько раз или что я меняю в redirect_url   -  person A.s    schedule 06.06.2019
comment
@dur существует под security.oauth2.client.registered-redirect-uri=set‹String› . я изменил его на security.oauth2.client.pre-installed-redirect-uri=redirect-uri, а затем использовал еще одно свойство security.oauth2.client.use-current-uri=false, и теперь он работает как весенняя загрузка по умолчанию принимает base-url/login как redirect-uri, тем не менее, большое спасибо за вашу поддержку, так как только тогда я узнаю, в чем проблема.   -  person A.s    schedule 07.06.2019


Ответы (1)


Я получал ту же ошибку в Gitlab, и я исправил ее, изменив http://localhost:5000 на http://localhost:5000/!!

person Vahid    schedule 10.12.2019