使用spring boot从client_credential grant类型访问受保护资源

时间:2016-07-11 15:24:23

标签: java spring oauth-2.0 openid spring-security-oauth2

我正在尝试使用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() + ")";
    }
}

1 个答案:

答案 0 :(得分:0)

在oauth2上下文中,您有一个客户端和一个资源所有者。 使用隐式授权类型,资源所有者是使用您的应用程序(客户端)的用户。您获得的访问令牌允许您检索用户拥有的资源。 使用客户端凭据授予类型,资源所有者是客户端。因此,您获得的访问令牌允许您获得客户端拥有的资源。