Spring security 如何限制用户仅使用选定的客户端登录?

Spring security 如何限制用户仅使用选定的客户端登录?,spring-security,oauth-2.0,Spring Security,Oauth 2.0,我有一个资源服务器和几个实现Oauth2安全性的客户端 我使用的流是(我不知道正确的名称): 我有一个数据库和一些表 一切都很好。我需要什么?oauth\u client\u details(应用程序表)和users之间没有逻辑关系,因此任何注册用户都可以访问任何注册的客户端 我需要限制用户仅访问我选择的应用程序 奖励:有人能告诉我我使用的是正确的OAuth流名称吗?不幸的是,您对流的描述与OAuth 2规范定义的任何流都不完全匹配 授权请求的HTTP POST由OAuth 2.0协议有效。但

我有一个资源服务器和几个实现Oauth2安全性的客户端

我使用的流是(我不知道正确的名称):

我有一个数据库和一些表

一切都很好。我需要什么?
oauth\u client\u details
(应用程序表)和
users
之间没有逻辑关系,因此任何注册用户都可以访问任何注册的客户端

我需要限制用户仅访问我选择的应用程序


奖励:有人能告诉我我使用的是正确的OAuth流名称吗?

不幸的是,您对流的描述与OAuth 2规范定义的任何流都不完全匹配

授权请求的HTTP POST由OAuth 2.0协议有效。但我没有看到在授权请求中发送客户端凭据

我能猜到这是最近的,但第3步在这个流程中并没有。因此,我认为您正在使用由您的组织定义的流程

现在,当涉及到客户端应用程序与最终用户的关联时,我认为您需要另一个存储客户端应用程序和用户标识符映射的表。OAuth服务器必须仅在请求的客户端应用程序已启用特定最终用户身份时才颁发令牌。我不是数据库专家,但表如下所示

**Oauth_cliet_details_tab**
---------------------------------------------------
| Client_ID | Client_Secret | Redirect_URL | etc..|
---------------------------------------------------


**Users_tab**
--------------------------------------------------------
|User_ID | User_Name | Email | Hashed_Salted_PWD| etc...
--------------------------------------------------------
现在,您的客户端应用程序权限选项卡应该如下所示

 **User_client_permisison_tab**
 ----------------------
 |User_ID | Client_ID |
 ----------------------
请注意,
UserID
是来自
Users\u选项卡的外键,
Client\u ID
是来自
Oauth\u cliet\u details\u选项卡的外键。
User\u ID
Client\u ID
都创建一个复合主键


因此,当OAuth服务器收到请求时,必须验证客户端凭据、最终用户凭据,然后使用客户端id和最终用户id,必须检查此表中的现有记录,以允许颁发令牌。您必须以某种方式在此表中添加和删除条目,这可能是一个配置步骤

谢谢你的回复。我几乎失去了希望。我想我犯了一个错误。我的意思是“授权服务器”而不是“资源服务器”。我从某个地方的一个例子中得出了这个结论。也许原始编码人员也希望保护客户端访问。。不管怎样,如果我们把客户端“登录”放在一边,你能猜到什么吗?我知道如何链接这些表,但是如何告诉Spring,如果一个有效的用户链接到询问客户机,那么他只接受该用户?在春季,每个服务器的身份验证都在不同的地方进行。@MagnoC好吧,我猜也是这样,并假设您所说的是授权服务器。可以假设这个流是隐式流(),但正如您所提到的,它没有客户端身份验证步骤。所以我仍然相信这是一个定制的实现。但是正如您所说,如果您忘记了客户端身份验证,那么它可以被视为隐式流(请阅读规范以了解情况),我相信这是不同的servlet。如果是这种情况,那么在从另一个服务器转发请求之前,必须使用请求属性。因为您是第一次处理客户机身份验证,所以必须在那里提取客户机ID,并通过请求转发到下一个servlet。所以,当您执行最终用户身份验证时,必须首先验证凭据,然后根据表组合客户端id和用户id。好主意。我很快就会试试的。我总是在代码的另一部分中获取客户机id,以向用户显示应用程序要求他的凭据。由于用户无法“看到”客户端登录过程,我认为这可能是一个好主意。这似乎有点像“用谷歌登录”的过程。不同的是,客户端没有像你说的那样登录谷歌,但我们必须在我们的帐户中插入客户端详细信息,包括重定向url。非常接近我正在做的事情。你非常聪明。我希望我可以在未来的Spring相关问题中依靠你。因为我正在做一些我的问题没有得到太多关注,我的声誉积分也没有了:-(
 **User_client_permisison_tab**
 ----------------------
 |User_ID | Client_ID |
 ----------------------