解决我在之前遇见的问题:https://blog.csdn.net/qq_43633220/article/details/108477023
前言
因为找到的资料有限,这些内容都是自己的理解,并不能保证完全正确,发现错误随时改。
客户端在项目中的定位
这是原理解:
我之前一直无法理解客户端的定位主要原因其实是我理解错了资源服务器的定位,我一直以为那些自己写的restful的接口全部都是资源服务器中的资源,但其实不对。
资源服务器中的资源一定是全部受授权服务器保护的,而这些资源通常是像用户信息之类的带强烈私人属性的,就一个论坛而言,论坛中的那些帖子并不属于资源服务器,而当一个用户发帖时需要通过一个客户端访问的用户信息才是资源服务器中资源。
到这客户端的定位就很清楚了,客户端是当一个项目需要去访问另一个一个受授权服务器保护的资源时创建的一个工具。
举一个例子:假设现在两个项目,我想让这两个项目都使用同一个账户,需要做的时将账户信息相关的内容作为资源服务器,当这两个项目需要去访问用户账号的信息时,这时就需要通过客户端去与授权服务器和资源服务器交互去获取这些信息。而如果这两个项目中自身有一些需要保护的资源,是需要在设置一个在客户端中的登录,而这个登录与授权服务器无关,所以那个demo中客户端本身也有一个登录。
更新:
还有一种理解就是客户端全部由前端去实现,客户端实际上就是前端的一部分。
我本以为原理解是正确的,但是按照这个理解去写代码是却出现了很多问题,而且网上很多案例中客户端部分就是前端实现的,按照客户端即前端的理解的话写代码过程中不会出现问题,但是Oauth2授权模式的规范有一条是说关于令牌与客户端和用户对应的映射必须储存在服务器,按前端即客户端的理解这个规范是无法做到的。
等有机会去请教大佬吧
客户端与授权服务器交互的实现
OAuth2AuthorizedClientProvider的工作被描述成对客户端进行授权,但我觉得这个描述很不清楚。
因为它的默认实现DelegatingOAuth2AuthorizedClientProvider的工作是调用一些支持不同授权方式的OAuth2AuthorizedClientProvider的实现对授权请求进行判断,如果授权请求的授权方式不同或客户端未得到授权返回null
,例如授权码模式的授权请求会被AuthorizationCodeOAuth2AuthorizedClientProvider认为授权方式相同但未得到授权也会返回null
,当所有OAuth2AuthorizedClientProvider都表示客户端没有得到授权时,会抛出一个异常