【问题标题】:Spring security oauth 2 client app can't check token validitySpring security oauth 2 客户端应用程序无法检查令牌有效性
【发布时间】:2017-10-17 13:35:21
【问题描述】:

这是我想要实现的目标:

我有一个企业 oauth 2 提供商,我想使用他们的登录表单并从该提供商那里获取代码、访问令牌等

这是我的个人资料

security:
  oauth2:
    client:
      clientId: MY_CLIENT_ID
      clientSecret: asecret
      accessTokenUri: https://blabla/oauth-server/oauth/token
      userAuthorizationUri:  https://blabla/oauth-server/oauth/authorize
      tokenName: access_token
      scope : read
      userInfoUri: https://localhost/user

我可以获取为访问令牌更改的代码,一切都很好,它正在调用我的本地端点来获取用户信息(例如角色)

但是当我调试代码时,我在任何地方都看不到任何 expires_in 值,而且我的令牌根本不会过期。

这是我的资源服务器配置

@EnableResourceServer
@EnableOAuth2Sso
@RestController
public class SecurityController extends ResourceServerConfigurerAdapter {

    private static final String RESOURCE_ID = "my_rest_api";


    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.resourceId(RESOURCE_ID).stateless(true);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.requestMatchers().anyRequest().and().authorizeRequests();
        http.
                anonymous().disable()
                .requestMatchers().antMatchers("/**/*")
                .and().authorizeRequests()
                .antMatchers("/**/*").access("#oauth2.hasScope('read')")
                .and().exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());
    }
}

我不知道如何撤销令牌

欢迎任何想法,我已经失去了一堆小时阅读教程......

【问题讨论】:

    标签: spring spring-boot spring-security oauth-2.0


    【解决方案1】:

    access-token-validity-seconds 添加到您的yaml

    security:
      oauth2:
        client:
          clientId: MY_CLIENT_ID
          clientSecret: asecret
          accessTokenUri: https://blabla/oauth-server/oauth/token
          userAuthorizationUri:  https://blabla/oauth-server/oauth/authorize
          tokenName: access_token
          scope : read
          userInfoUri: https://localhost/user
          access-token-validity-seconds: 30 //Adds 30 seconds of token validity
    

    【讨论】:

    • 我可以,但令牌有效性应该来自身份验证提供者吧?
    • 我相信您使用的是基于内存的客户端。当您将令牌存储移动到某个数据库时,您可以更新每个客户端的访问令牌有效性。
    • 我确实在内存存储中使用,但我仍然从身份验证提供程序获取 expires_in 值,这应该由 Spring 使用和检查,不是吗?还是有什么我不明白的地方?
    • 没错。授权服务器为您提供 expires_in ,然后对于每个经过验证的 api 请求,它首先检查 access_token 是否已过期。
    • 似乎它不会自动检查这一点,也不会刷新令牌。听起来很奇怪这样的事情不起作用
    猜你喜欢
    • 2015-10-14
    • 2019-07-11
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2018-11-15
    • 2021-02-18
    • 2013-07-28
    相关资源
    最近更新 更多