带有feignclient + spring security 5 +来自自定义提供程序的oauth2.0的restapi

问题描述

我已经阅读了许多帖子,文章和文档,但是我对此感到非常困惑。 我想做的是使用feignclient和springboot的apirest,并且必须在请愿书中发送不记名令牌,我要从自定义提供程序获取此不记名令牌。

我的假装客户班级看起来像这样:

@FeignClient(name="test-client",url = "https://testurl/")
public interface TestClient {
    @GetMapping("/auth/me")
    public ResponseEntity<String> testLogin@R_543_4045@ion() throws FeignException;
}

我的application.properties:

server.port=8082
spring.security.oauth2.client.registration.custom.client-id=mylargeID
spring.security.oauth2.client.registration.custom.client-secret=mylargePassword
spring.security.oauth2.client.registration.custom.authorization-grant-type=client_credentials
spring.security.oauth2.client.registration.custom.scope=access_token_only
spring.security.oauth2.client.registration.custom.provider=custom-provider
spring.security.oauth2.client.registration.custom.client-authentication-method=basic

spring.security.oauth2.client.provider.custom-provider.authorization-uri=https://testurl/auth/token
spring.security.oauth2.client.provider.custom-provider.token-uri=https://testurl/auth/token

我认为其中指出了使请求者获得令牌的所有必要数据...我不明白“ authorization-uri”和“ token-uri”之间有什么区别

在springboot应用程序主类中,我只有以下两个注释:

@SpringBootApplication
@EnableFeignClients

最后但同样重要的一点是,我pom文件中的依赖项如下所示:

<properties>
    <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.3.4-RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1-RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
            <version>2.2.0-RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework.security</groupId>
          <artifactId>spring-security-oauth2-client</artifactId>
            <version>5.3.4-RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
            <version>2.3.4-RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20190722</version>
        </dependency>
    </dependencies>

现在,我得到的是具有ID的客户注册的无效授权授予类型(client_credentials):自定义

我在做什么错了?

解决方法

  1. 授权网址

/ authorization 端点用于与资源所有者进行交互并获得访问受保护资源的授权。为了更好地理解这一点,假设您想使用您的Google帐户登录到服务。首先,该服务会将您重定向到Google进行身份验证(如果您尚未登录),然后您将获得一个同意屏幕,系统将要求您授权该服务访问某些您的数据(受保护的资源);例如您的电子邮件地址和联系人列表。

  1. 令牌网址

访问令牌是不透明的字符串或JWT,它指示谁授权了哪个应用程序的权限(范围)。它打算在 / oauth / token 端点与访问令牌交换。

在此处查看更多信息:https://auth0.com/docs/protocols/protocol-oauth2