Spring Security OAuth2如何知道令牌何时过期?

时间:2018-07-31 19:17:47

标签: spring spring-security spring-security-oauth2

我添加了JDBC令牌存储并添加了https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql中的SQL(第一个和最后一个表除外)。然后,我获取了一个令牌:

$ curl -u xxx:123456 http://localhost:8080/oauth/token -d grant_type=client_credentials -d client_id=xxx -d client_secret=123456 -d scope=write

{"access_token":"0cbd0733-2c37-400b-abd7-5d1507c2204f","token_type":"bearer","expires_in":42498,"scope":"write"}

唯一带有时间戳的表是oauth_approvals,但它是空的!

MariaDB [xxxxxx]> select * from oauth_approvals;
Empty set (0.00 sec)

那么Spring如何知道令牌何时过期?

我重新启动了服务器,并确认令牌仍然有效并且是相同的令牌。

2 个答案:

答案 0 :(得分:0)

如果您将Oauth与JWT(json网络令牌)一起使用,请查看此文章:https://jwt.io/introduction/

JSON Web令牌由三部分组成,这些部分由点(。)分隔,分别是:     标头     有效载荷     签名 因此,JWT通常如下所示。 xxxxx.yyyyy.zzzzz

有效负载包含声明,这些声明代表有关实体和令牌本身的信息。这些声明包括:iss(发布者),exp(到期时间),sub(主题),aud(受众群体)。

因此,基本上,过期时间在令牌中,可以使用令牌本身进行验证。

有效载荷可能不包含exp声明=>令牌不会过期。

答案 1 :(得分:0)

一个迟到的答案,但是答案就在这里。

您实际上正在使用client_credentials授予类型,这意味着您不是在代表Resource owner来授权客户端应用程序,而是在访问自己的帐户(没有任何用户名/密码)。因此,oauth_approvals将不会被填充。实际上,当authorization_code“授权”客户代表他访问其帐户时,此表仅用于Resource owner授权类型。

根据您的问题,应填充的表为:

  • oauth_access_token:哪个主体和clientId在使用什么 access_token。在此表中,令牌列存储所有 信息,包括您要求的到期时间。
  • oauth_refresh_token:用于请求新访问权限的刷新令牌 令牌过期后。

此表oauth_client_details包含客户信息。您说您没有使用它,所以我假设您正在将客户端详细信息存储在内存中。

在此处了解有关oAuth2协议的更多信息:https://oauth.net/2/