当前位置: 首页 > 面试题库 >

了解OAuth2客户端凭据流程

燕鸿波
2023-03-14
问题内容

我正在尝试了解和实现新的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的应用有一些误解,因此请您多加澄清。


问题答案:

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

您需要执行以下操作:

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>


 类似资料:
  • 顺便说一句,这些微服务只会通过中间件层互相交谈,我的意思是不需要用户凭据来允许授权(用户登录过程如Facebook)。 我在Internet上寻找了一些示例,展示了如何创建一个授权和资源服务器来管理这种通信。然而,我只是找到了一些例子,解释了如何使用用户凭据(三条腿)来实现它。 有没有人有在Spring Boot和Oauth2中如何做的样例?如果有可能提供更多关于所用范围的详细信息,令牌交换将不胜

  • 我试图使用spring OAuth2在Spring Boot服务中实现服务到服务的安全性。我希望一个服务访问另一个服务的安全资源,而不涉及任何用户操作。 我可以设置auth服务器并使用curl请求获取令牌。我发现的测试使用Http对象来检查状态代码。 如何在具有RestTemplate和spring OAuth2的java客户机中使用客户机凭据授权类型? 我想它一定像添加一个依赖项、一个注释和一个

  • 我在我的客户端应用程序(我的Spring网关)中配置客户端凭据流时遇到了一些问题。 我的授权服务器功能正常,与邮递员一起测试,没有任何问题。 但在我的客户机应用程序中,oauth2配置似乎没有编译错误。 当我调用服务器资源上的受保护资源时,我的客户端应用程序似乎试图调用其基础中的URL,而不是授权服务器。 请参阅我的配置文件中的代码: 我的客户依赖: 我的网络客户端的配置: 我在资源上的呼叫者:

  • 我已经考虑这个问题好几天了,从经验中我知道我通常会解决这些问题,但这次我遇到了砖墙。 我有一个在Azure DevOps YAML管道中实例化的python应用程序。该应用程序调用Azure DevOps REST API来创建存储库 该应用程序使用PAT(个人访问令牌)进行身份验证 我在Azure DevOps中创建了一个应用程序: 我的计划是让这一切都在Postman中工作,然后将我的发现移植

  • 如果可能的话请告诉我。另外,我想传达的是Keycloak和openid-connect协议是全新的。

  • 我已经读了很多关于CORS,角,节点等的东西。老实说,我很困惑这些我应该使用哪一个,我不知道如何使用。有人能帮我简化一下吗?