最近在研究oAuth2。
已经理清楚了 AuthorizationServer,ResourceServer , oAuthClient之间的关系。
也能够自己搭建 AuthorizationServer,ResourceServer,获取access_token等一切正常。整个项目是用 sprong boot oauth2 搭建的。但但但。现在问题来了。
我拿到access_token之后怎么用?我在网上找了一大堆资料,大多都只介绍到怎么用access_token获取用户信息,也就是拿用户信息资源,并且实现了单点登录。
但我的resource肯定不只用户信息,还有一些别的资源 。那我怎么在我的客户端中方便的使用获取到的access_token。主要包括  客户端的access_token的存储,以及access_token的使用!
问题有:
一、如果是web应用,access_token放到前端好吗?个人感觉不太好。
二、如果是客户端服务器向资源服务器发送请求的话,如何优雅的携带access_token? 实际到代码层面 ,是使用 restTemplate ? feign ?或者其它什么技术比较优雅?
三、这个注解有什么用 @EnableOAuth2Client

解决方案 »

  1.   

    楼上说的请求头我了解。
    但在项目里面,我应该怎么存储这个access_token ?然后,怎么附加在请求头上?
    我研究了一下 OAuthRestTemplate 好像有类似的作用,但还没有搞透彻,有更详细的资源吗?有了解Spring oAuth2 的大神能不能进来指点一下?
      

  2.   

    如果用的是普通的access_token,也就是uuid可以选择保存在redis中   如果是jwt生成的不需要保存  因为那一串信息就已经包含到期时间了。 至于怎么传 这个不好意思不知道 这个是app端的事情
      

  3.   

    普通客户端,访问普通服务访问如果用Ribbon通过下面定义的restTemplate Bean就可以访问,用feign的话通过定义的接口访问
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
    return new RestTemplate();
    }       
    使用了Spring Cloud OAuth2的客户,Spring 提供了OAuth2RestTemplate,类似的Ribbon通过OAuth2RestTemplate访问资源服务资源的时候就会自动携带已经获取的access_token
           
     @Bean
    @LoadBalanced
    protected OAuth2RestTemplate oAuth2RestTemplate(OAuth2ProtectedResourceDetails resource,
     OAuth2ClientContext context) {
    return new OAuth2RestTemplate(resource, context);
    }
    如果使用feign,需要定义OAuth2FeignRequestInterceptor,这样通过feign访问资源服务资源的时候就也会自动携带已经获取的access_token
    @Bean
    public RequestInterceptor oauth2FeignRequestInterceptor(OAuth2ProtectedResourceDetails resource,OAuth2ClientContext context) {
    return new OAuth2FeignRequestInterceptor(context,new resource);
    }