OAuth - 分离Auth服务器和资源服务器在访问受保护资源

时间:2015-07-22 19:21:57

标签: mysql spring hibernate

  1. 我有一个Restful示例,它使用 Spring Security OAuth2 ,效果很好。基本上,我可以获得access_token并使用access_token来访问受保护的资源。这里的类似示例:Securing Restful Web Services with Spring Security and OAuth

  2. 我通过添加customUserAuthenticationProvider来通过 Hibernate Mysql 进行身份验证来更改该示例。与此示例中描述的内容类似:spring4-rest-oauth2

  3. 我将InMemoryTokenStore替换为JdbcTokenStoreoauth_access_token表的MySQL模式如下所示:

    CREATE TABLE `oauth_access_token` (
    `token_id` varchar(256) DEFAULT NULL,
    `token` blob,
    `authentication_id` varchar(255) DEFAULT NULL,
    `user_name` varchar(256) DEFAULT NULL,
    `client_id` varchar(256) DEFAULT NULL,
    `authentication` blob,
    `refresh_token` varchar(256) DEFAULT NULL,
    `access_token_validity` int(11) DEFAULT NULL,
    `refresh_token_validity` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  4. 到目前为止没问题。一切都很好。每次登录时都会有一行添加到oauth_access_token表(我可以使用MySQL工作台查看blob列(令牌))。我可以使用此访问令牌来访问受保护的源,而不会出现任何问题。

  5. 现在,我运行了2个Jetty实例,每个实例都有自己的端口,即 8080 8888 。每个实例都有相同的war文件。我在第一个实例上登录以获取access_token,之后我使用此access_token从第二个实例访问受保护资源。但是,它始终返回401 error: Invalid access token

  6. 如果我在第一个实例中使用此access_token来访问资源,那么它运行良好。

    另一个奇怪的观察是,如果我尝试从第二个实例访问资源,access_token中的oauth_access_token将被删除。我必须重新登录才能再次将这一行插入表中。

    1. 这是我用于两个实例的springSecurity.xml文件: SpringSecurity
    2. 我的问题是:
      - 有没有人遇到类似我的问题?我知道使用JdbcTokenStore在某种程度上是直截了当的,但我不知道为什么它发生在我的情况下。
      - 如何解决这个问题? 任何评论,指示,建议都非常感谢。

0 个答案:

没有答案