28.1.2 Resource Server
为了使用access token,你需要一个资源服务器(可以跟授权服务器是同一个)。创建资源服务器很简单,只需要添加@EnableResourceServer
,提供一些配置以允许服务器解码access token。如果应用也是授权服务器,由于它知道如何去解码tokens,所以也就不需要做其他事情。如果你的app是独立的服务,那你就需要给它添加以下可选配置中的某一项:
security.oauth2.resource.user-info-uri
用于/me
资源(例如,PWS的https://uaa.run.pivotal.io/userinfo
)。security.oauth2.resource.token-info-uri
用于token解码端点(例如,PWS的https://uaa.run.pivotal.io/check_token
)。
如果user-info-uri
和token-info-uri
都指定了,你可以设置flag筛选出最想要的那个(默认prefer-token-info=true
)。
另外,如果token是JWTs,你可以配置security.oauth2.resource.jwt.key-value
解码它们(key是验签的key)。验签的键值可以是一个对称密钥,也可以是PEM编码的RSA公钥。如果你没有key,并且它是公开的,你可以通过security.oauth2.resource.jwt.key-uri
提供一个下载URI(有一个"value"字段的JSON对象),例如,在PWS平台上:
$ curl https://uaa.run.pivotal.io/token_key
{"alg":"SHA256withRSA","value":"-----BEGIN PUBLIC KEY-----\nMIIBI...\n-----END PUBLIC KEY-----\n"}
同时创建JWT和JWK属性会产生错误,
security.oauth2.resource.jwt.key-uri
(或security.oauth2.resource.jwt.key-value
)和security.oauth2.resource.jwk.key-set-uri
只能选一个配置如果你使用
security.oauth2.resource.jwt.key-uri
,授权服务器需要在应用启动时也运行起来,如果找不到key,它将输出warning,并告诉你如何解决。
OAuth2 资源受一个有顺序的filter过滤器链保护,顺序可由security.oauth2.resource.filter-order
配置,默认地,这些过滤器都是在保护Actuator端点的过滤器之后的(因此actuator过滤器会在HTTP Basic除非你修改过滤器顺序)