IT必备技能SpringOauth2

认证功能实现(spring-oauth2)

2020-11-25  本文已影响0人  do_young

前言

前面讲述了一下spring security对认证的实现,该实现的使用场景主要是用户本人认证。
有一种场景是用户将授权给第三方应用,访问本人在该应用的资源。
站在应用的角度出发,就是经得用户授权以后,对第三方应用认证,获取访问用户资源的权限。

oauth2协议

oauth2就是一种用户对第三方应用授权,获取用户在本应用资源访问权限的协议标准。
该协议中针对第三方应用有四种认证方式。

相关认证的类型选择流程如下所示:


image.png

Spring oauth2源码分析

关于Spring对oauth2的实现框架图如下所示:


image.png

其中:

所以认证的主要逻辑都在认证授权服务上(AuthorizationServer)。
其中:

关键实现类源码分析

TokenEndPoint

    @RequestMapping(value = "/oauth/token", method=RequestMethod.POST)
    public ResponseEntity<OAuth2AccessToken> postAccessToken(Principal principal, @RequestParam
    Map<String, String> parameters) throws HttpRequestMethodNotSupportedException {

    。。。。。。
        OAuth2AccessToken token = getTokenGranter().grant(tokenRequest.getGrantType(), tokenRequest);
        if (token == null) {
            throw new UnsupportedGrantTypeException("Unsupported grant type");
        }

        return getResponse(token);

    }

其中对不同的oauth2协议的认证协议实现,主要是通过TokenGranter接口的grant方法的实现。
TokenGranter接口及相关的实现类的关系图所下所示:

image.png

AuthorizationServiceTokenServices

image.png
上一篇下一篇

猜你喜欢

热点阅读