了解OAuth2客户端凭据流程

问题描述

您没有向授权服务器认证客户端。

您需要执行以下操作:

curl --user the_client:secret --data "grant_type=client_credentials" http://localhost:9090/oauth/token

这是向授权服务器认证客户端,然后指定grant_type和其他参数。这将返回类型为“ bearer”的访问令牌,其范围由oauth客户端详细信息确定。获得令牌后,可以通过设置Authorization标头访问受保护的资源:

curl -H "Authorization: Bearer <accessToken>" <resourceUrl>

解决方法

我正在尝试了解和实现新的REST服务器与现有的客户端应用程序之间的客户端凭证流。我已经像这样设置了spring-security OAuth2 。从到目前为止的理解来看,我的服务器现在应该支持以下请求:

$ curl -X -v -d 'client_id=the_client&client_secret=secret&grant_type=client_credentials' -X POST "http://localhost:9090/oauth/token"

但我明白了

InsufficientAuthenticationException: There is no client authentication

由引起的Principalnull这里(弹簧安全码):

@FrameworkEndpoint
@RequestMapping(value = "/oauth/token")
public class TokenEndpoint extends AbstractEndpoint {

    @RequestMapping
    public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal,@RequestParam("grant_type") String grantType,@RequestParam Map<String,String> parameters) {

        if (!(principal instanceof Authentication)) {
            throw new InsufficientAuthenticationException(

看来,我需要首先 针对服务器 进行 身份验证 。但这 不是我想做的
。我希望我的两个服务器使用共享密钥相互通信。OAuth提供者服务器应应请求向(受信任的)客户端服务器提供访问令牌,以便客​​户端服务器随后可以使用该令牌来访问服务器上的所有REST资源。这应该保护REST资源免受外部访问。

稍后,我想将选定的资源提供给第三方,并最终为服务器到服务器的通信实现更细粒度的安全性。但是现在我需要保护REST服务器免受外部访问。

看起来我可能对整个客户端凭据流或那里的spring-security的应用有一些误解,因此请您多加澄清。

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”