【问题标题】:Accessing protected resource from authorization server从授权服务器访问受保护的资源
【发布时间】:2016-11-12 11:17:31
【问题描述】:

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

我的问题是,即使在数据库中生成了访问令牌,当我尝试访问该资源时,我仍然拒绝访问。

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

以下是授权休息控制器中用于请求资源的代码:

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());

【问题讨论】:

    标签: spring spring-security access-token spring-security-oauth2


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2019-08-13
      • 2016-12-23
      相关资源
      最近更新 更多