2017-08-10 11 views
0

私は3つのサーバー、UI(またはクライアント)、リソースサーバーと認証サーバーを実行しています。すべてのことは、リソースサーバーからクライアントに情報を取得することを除いて、完全に機能します。郵便配達員やその他のレストサービスプログラムを使用する場合は、認証サーバーからトークンを取得し、トークンを使用してリサーチサーバーから情報を取得します。春の起動時にクライアントサーバーからリソースサーバーのテキストを取得する方法

はライトがオフになっている。今私は、私のクライアントのサーバーにアクセスしてください私は私がログイン認証サーバにリダイレクト認証されておりませんならば、それはクライアントサーバーに戻って私を置き、それはのような単純なラインが表示されます

しかし、私はそれが要求とトークンを取得しないことを意味すると仮定されている404ヌルエラーを取得します。

{「ライト」:「ライトが消灯している」}すべてのヘルプは、リソースサーバからの情報とを取得する方法で評価されて

私のリソースサーバで

はシンプルなラインでありますトークンが添付されています。

マイリソースサーバコード:

LightBoot.java 
@RestController public class LightsBoot { 
    private static final String lights = "lights are %s"; 
    @RequestMapping(value = "/lights") 
    public Lights greeting(@RequestParam(value = "name", defaultValue = "off") String name) { 
     return new Lights(String.format(lights, name)); 
    } } 

と私のクライアントコード:私のクライアントアプリの

auth-server: http://localhost:8081/authserver 
resource-server: http://localhost:8082/resource 
endpoint: 
    lights: http://localhost:8082/resource/lights 
server: 
    port: 8080 
security: 
    basic: 
    enabled: false 
    oauth2: 
    client: 
     client-id: user 
     client-secret: user-secret 
     access-token-uri: ${auth-server}/oauth/token 
     user-authorization-uri: ${auth-server}/oauth/authorize 
     scope: USER 
     authorized-grant-types: authorization_code 
    resource: 
     token-info-uri: ${auth-server}/oauth/check_token 
logging: 
    level: 
    org.springframework.security: DEBUG 

EDIT1 コンソール出力:

@SpringBootApplication public class ClientApplication { 

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

    @Bean 
    OAuth2RestTemplate oAuth2RestTemplate(OAuth2ClientContext clientContext, OAuth2ProtectedResourceDetails details) { 
     return new OAuth2RestTemplate(details, clientContext); 
    } 

    @Bean 
    public RestTemplate restTemplate() { 
     return new RestTemplate(); 
    } } 

@RestController public class NewController { 


    private RestTemplate restTemplate; 

    @Value("${endpoint.lights}") 
    private String lights; 


    @Autowired 
    public NewController(RestTemplate restTemplate) { 
     this.restTemplate = restTemplate; 
    } 


    public GetLights newLight() { 
     return restTemplate.getForObject(lights, GetLights.class); 
    } 

    @RequestMapping(value = "/") 
    public String lights() { 

     return newLight() + "  <--- here should be value of lights"; 
    } 

} 

クライアントのプロパティは次のように見えます

Redirecting to 'http://localhost:8081/authserver/oauth/authorize?client_id=jan&redirect_uri=http://localhost:8080/login&response_type=code&scope=USER&state=qJE3Rp' 
Retrieving token from http://localhost:8081/authserver/oauth/token 
2017-08-10 14:47:48.898 DEBUG 17560 --- [nio-8080-exec-2] g.c.AuthorizationCodeAccessTokenProvider : Encoding and sending form: {grant_type=[authorization_code], code=[0zeUdq], redirect_uri=[http://localhost:8080/login]} 
2017-08-10 14:47:48.928 DEBUG 17560 --- [nio-8080-exec-2] s.CompositeSessionAuthenticationStrategy : Delegating to org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy[email protected] 
2017-08-10 14:47:48.929 DEBUG 17560 --- [nio-8080-exec-2] s.CompositeSessionAuthenticationStrategy : Delegating to o[email protected]1dd8d6 
2017-08-10 14:47:48.929 DEBUG 17560 --- [nio-8080-exec-2] uth2ClientAuthenticationProcessingFilter : Authentication success. Updating SecurityContextHolder to contain: or[email protected]e5d78cca: Principal: user; Credentials: [PROTECTED]; Authenticated: true; Details: remoteAddress=0:0:0:0:0:0:0:1, sessionId=<SESSION>, tokenType=bearertokenValue=<TOKEN>; Granted Authorities: ROLE_USER 
2017-08-10 14:47:48.929 DEBUG 17560 --- [nio-8080-exec-2] RequestAwareAuthenticationSuccessHandler : Redirecting to DefaultSavedRequest Url: http://localhost:8080/ 
2017-08-10 14:47:48.929 DEBUG 17560 --- [nio-8080-exec-2] o.s.s.web.DefaultRedirectStrategy  : Redirecting to 'http://localhost:8080/' 
+0

「クライアントサーバーに戻ってきます」と言うと、具体的にはどういう意味ですか?認証サーバーはリダイレクト応答を返しますか?もしそうなら、どこにリダイレクトされていますか?その時点で間違ったURLに送信されているようです。 – DaveyDaveDave

+0

@DaveyDaveDave編集内容を追加して、コンソールが何を出力するかを表示しました。私のクライアントにアクセスするには、http:// localhost:8080にアクセスし、サーバを認証するためにログインしてからログインしてからhttp:// localhost:8080に戻ってください。 – Jan

答えて

0

それは次のようになりますので、NewControllerであなたのlights()方法に@ResponseBody注釈を追加してみてください:これは、ほとんどの推測ですが(何が起こっている、と非常に依存することになります私は疑う

@RequestMapping(value = "/") 
@ResponseBody 
public String lights() { 
    return newLight() + "  <--- here should be value of lights"; 
} 

あなたの設定では)lights()メソッドから返された値は、文字列lights are off <--- here should be value of lightsであると考えられています。つまり、lights are off <--- here should be value of lights.htmlのようなファイルを探しています。これはsrc/main/resources/templatesのようですない発見。

@ResponseBodyアノテーションは、応答の内容として値を返すようにSpringに指示します。

+0

saddlyいいえ、resourceAppコンソールで取得します アクセスは拒否されました(ユーザーは匿名です)。認証エントリポイントにリダイレクトされ、Written [error = "unauthorized"、error_description = "このリソースにアクセスするには完全な認証が必要です]。 – Jan

+0

私は、クライアントサーバーがSsoを使って実行していることを追加するべきだと思います。コードは、私は、リソースサーバーでh2データベースを使用し、その後、それは働いた。 – Jan

関連する問題