我正在尝试使用Spring授权服务器构建一个身份提供程序,第三方应用程序将使用它来进行FIM(联合身份管理)。
我们希望每个OAuth客户端都需要身份验证(如果用户尝试使用不同的客户端登录,则需要对每个客户端进行身份验证)。
开箱即用的流程如下所示:
所以有两个问题。
/oauth2/authorize
端点只检查会话主体是否经过身份验证,它不关心或不知道主体是针对哪个客户端的。
1.只有一个/login
端点,因此在身份验证期间它不知道使用了哪个客户端。
我的最佳选择是:
1.使oauth2/authorize
端点重定向到/login
时包含查询参数client_id
1.创建一个自定义AuthenticationFilter
,同时将client_id
添加到User主体
1.覆盖oauth2/authorize
端点的authorizationRequestConverter
,并验证请求中的客户端是否与存储在经过身份验证的主体上的客户端相同
我错过了什么吗?有人知道更简单的方法吗?
1条答案
按热度按时间xxb16uws1#
根据您的上一条评论,似乎有一种可能性是每次都简单地要求身份验证,或者至少每次请求授权时都要求身份验证。在这种情况下,您可以在向客户端发出授权码后使用
Filter
清除身份验证。这似乎并不理想,而且会导致糟糕的用户体验,但可能会达到您的要求。