0

我正在尋找使用Feign的服務登錄到Spring OAuth2服務器的grant_type = password。我已經確認OAuth2服務器在我進行正常的REST調用時工作。但是,當與Feign一起嘗試時,它會失敗。試圖使用Feign登錄到Spring OAuth2服務器

在我的服務,我有:

@Component 
@Scope("prototype") 
@FeignClient(url = "http://localhost:9999/uaa") 
public interface AuthClient { 

    @RequestMapping(value="/oauth/token", method=RequestMethod.POST) 
    @Headers({"Authorization: Basic some_base64encoded_client_secret_here=="}) 
    public LoginResponse login(
      @Param("username") String username, @Param("password") String password, @Param("grant_type") String grantType); 

} 

我得到這個錯誤: java.lang.ClassCastException: Cannot cast com.sun.proxy.$Proxy129 to org.springframework.web.bind.annotation.RequestMapping

大多數的例子,我覺得展示瞭如何攔截假死來使用OAuth頭/等。並假定訪問令牌已經存在。但這不是我的問題。我還沒有訪問令牌,因爲我試圖從登錄中獲取訪問令牌。有關如何使用Feign登錄的任何想法?

回答

0

可以映射這樣你自己的迴應:

@Component 
@FeignClient(name = "authClient", url = "http://localhost:8080") 
public interface AuthClient { 

    @RequestMapping(value="/oauth/token", method= RequestMethod.POST) 
    AuthResponse login(@RequestParam("grant_type") String grantType, @RequestParam("username") String username, 
        @RequestParam("password") String password, @RequestParam("scope") String scope); 

    @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) 
    class AuthResponse { 
     String access_token; 
     String token_type; 
     String refresh_token; 
     String expires_in; 
    } 
} 

public class AuthService { 

    private final AuthClient authClient; 

    public AuthService(AuthClient authClient) { 
     this.authClient = authClient; 
    } 

    public AuthClient.AuthResponse authenticate(String login, String password, String scopes) { 
     return this.authClient.login("password", "admin", "admin", "read+write"); 
    } 
} 

您可以註冊一個請求攔截器在每個請求添加授權頭:

@Bean 
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() { 
    return new BasicAuthRequestInterceptor("clientId", "clientSecret"); 
} 

該代碼可以使用一個樣本春季安全的OAuth2服務器。

+0

剛剛嘗試過,同樣的錯誤。我認爲這可能與將OAuth的響應映射到我自己的響應有關。我不確定如何確保Feign能夠將參數映射到我自己的響應中? – prograhammer

+0

請參閱我編輯的回覆。 –

相關問題