我正在尝试使用oauth client_credential grant类型进行适应,以访问受保护的资源(我正在使用此资源服务器:https://bitbucket.org/hascode/spring-oauth2-example),在给定用户信息存在(隐式流)的情况下工作正常。
根据我的理解, client_credentials没有用户信息,因此在userinfo端点返回401
失败2016-07-11 15:19:37.335 INFO 9747 --- [nio-9001-exec-2] o.s.b.a.s.o.r.UserInfoTokenServices : Getting user info from: http://rain.okta1.com:1802/oauth2/v1/userinfo
2016-07-11 15:19:37.421 INFO 9747 --- [nio-9001-exec-2] o.s.b.a.s.o.r.UserInfoTokenServices : Could not fetch user details: class org.springframework.web.client.HttpClientErrorException, 401 Unauthorized
我也是一个Spring新手,所以不确定我是否需要为此授权类型设置一些配置,因为我刚从同一个人那里学习教程:http://www.hascode.com/2016/03/setting-up-an-oauth2-authorization-server-and-resource-provider-with-spring-boot/
配置不多,这是完整的资源
package com.hascode.tutorial;
import java.util.UUID;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Scope;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@EnableResourceServer
public class SampleResourceApplication {
public static void main(String[] args) {
SpringApplication.run(SampleResourceApplication.class, args);
}
@RequestMapping("/")
public String securedCall() {
return "success (id: " + UUID.randomUUID().toString().toUpperCase() + ")";
}
}
答案 0 :(得分:0)
在oauth2上下文中,您有一个客户端和一个资源所有者。 使用隐式授权类型,资源所有者是使用您的应用程序(客户端)的用户。您获得的访问令牌允许您检索用户拥有的资源。 使用客户端凭据授予类型,资源所有者是客户端。因此,您获得的访问令牌允许您获得客户端拥有的资源。