使用 Oauth 2 对服务器进行身份验证/自动化的最佳方法是什么?



我有一个服务器server1,它公开了一个API,返回购买物品的列表。此API受OAuth2保护。用户需要通过身份验证并具有角色"role_SUPERVISOR"才能访问此API。

我希望能够从另一个服务器server2调用此API。该服务器调用服务器1的API,而无需任何用户交互(用于备份等目的(。

当调用server1 API时,验证server2的最佳方法是什么?

我可以创建一个角色为"role_SUPERVISOR"的特定技术用户,但我了解到客户端凭据授予类型可能更适合这种情况(服务器到服务器的身份验证(。然后我只需要创建一个新的客户端应用程序并将其注册到授权服务器中。但是,如何将角色"role_SUPERVISOR"添加到客户端应用程序中?

谢谢。

我认为有一些术语在使用注释和问题中,这让问题有点混乱。

因此,我需要server2具有"ROLE_SUPERVISOR"才能访问此API。

使用OAuth 2.0,服务器就不是有角色的东西。令牌具有声明,应用程序可以解释这些声明。如问题中所述,您可以通过多种方式获得令牌,其中之一是客户端凭据授予。

但是,如何将角色"role_SUPERVISOR"添加到客户端应用程序

说客户端有角色也不完全正确。

我相信OP希望server2将OAuth 2.0令牌传递给server1,并且给定的令牌中应该有适当的声明,以便server1将使用授予ROLE_SUPERVISOR的权限来授予相应的请求。

要获得这样一个带有客户端凭据授予的令牌,您需要在授权服务器中配置一个客户端:

@Override
protected void configure(ClientDetailsServiceConfigurer clients) {
clients.inMemory()
.withClient("id")
.authorizedGrantType("client_credentials")
.authorities("ROLE_SUPERVISOR")
.secret("{noop}secret")
}

然后,server2可以使用配置的客户端id和秘密来获得令牌。如前所述,SpringSecurity附带了过滤器,用于与授权服务器进行协商,并将适当的Authorization标头添加到对server1的调用中。

最新更新