我有一个场景,需要访问授权服务器需要访问受保护资源(在单独的资源服务器上)以获取用户相关信息。要访问此受保护资源,需要访问令牌。我通过TokenGranter
手动生成此令牌,并将其添加到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());
答案 0 :(得分:0)
很多事情可能都是错的。首先,检查资源服务器需要访问令牌的内容 - 它需要的范围等。确保生成具有正确范围的访问令牌。您还提到需要访问令牌才能访问用户资源。我不熟悉您正在使用的OAuth2TokenGranter,但请检查生成的访问令牌是否与用户授权相关联。您的令牌中心可能已生成访问令牌,但如果它未链接到用户授权,您的授权服务器将使用不完整的信息回复资源服务器的查询 - 导致您的资源服务器拒绝您的请求访问权。