从授权服务器访问受保护的资源



我有一个场景,授权服务器需要访问需要访问的受保护资源(在单独的资源服务器上),以获取与用户相关的信息。要访问这个受保护的资源,需要一个访问令牌。我通过TokenGranter手动生成这个令牌,并将其添加到Rest Template发出的请求的标头中。当访问资源时,它使用授权服务器对令牌进行身份验证。

我的问题是,即使在数据库中生成的访问令牌,当我试图访问资源时,我一直被拒绝访问。

我在访问资源时做错了什么吗?如何从授权服务器访问受保护的资源?

下面是授权rest控制器中用于请求资源的代码:

private final OAuth2TokenGranter tg;
TokenRequest tr = new TokenRequest(reqparams, clientId, scope, grantType);
OAuth2AccessToken grantToken = tg.grant("bearer", tr);
String token = "Bearer " + grantToken.getValue();
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", token);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
restTemplate.exchange(url, HttpMethod.GET, entity, PagedResources.class,  authentication.getName());

很多事情都可能是错的。首先,检查资源服务器需要访问令牌具有什么——它需要什么作用域,等等。确保生成具有正确作用域的访问令牌。您还提到需要一个访问令牌来访问用户资源。我不熟悉您正在使用的OAuth2TokenGranter,但请检查生成的访问令牌是否链接到用户授权。您的令牌授予者可能已经生成了访问令牌,但如果它没有链接到用户授权,您的授权服务器将用不完整的信息回复资源服务器的查询——导致您的资源服务器拒绝您的访问请求。

最新更新