SpringSecurity5.5发布,正式实现OAuth2.0第五种授权模式最大的亮点是jwt-bearer,这是另一种支持OAuth2.0的授权模式。这种模式大家可能比较陌生。说实话,胖哥在实际开发中没玩过这个模式,但也算不上什么新规范。它是2015年5月起草的RFC7523的一部分,现已正式实施。在SpringSecurity中,今天就和大家一起研究一下这个规范。JWTBearer授权模式通常出现在各大技术社区。OAuth2.0有四种授权模式:授权码模式grant_type=authorization_code。隐藏模式response_type=token。密码模式grant_type=password。凭证模式grant_type=client_credentials。其实这些模式都使用了BearerToken,甚至Token直接使用了JWT技术。那么它是如何定义为授权模式的呢?JWTBearer授权首先jwt-bearer认证请求还携带了grant_type参数,表示使用的授权方式:grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer的grant_type有点长!它还需要携带断言参数。该参数对应的值只能是JWT。此外,它还可以携带(可选的)scope参数来表示请求的范围。Accordingtotheabovedescription,theauthorizationmodeofajwt-bearertypeisroughlylikethis:POST/token/oauth2HTTP/1.1Host:felord.cnContent-Type:application/x-www-form-urlencodedgrant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv.ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs其实也就是说用户如果要请求授权要先有一个JWT,我个人估计有可能是可以被授权服务器信任的第三方JWT凭据,凭据校验通过Userscanthenbeauthorizedtoaccessspecificresources.ClientauthenticationRFC7523alsostipulatesthatJWTBearercanalsobeusedforclientauthentication.Theclientcarriesaclient_assertion_typeparameter:client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearerissimilartoBeaererJWTauthorization,butalsocarriesaclient_assertionparameter,whichalsoneedstocarryaJWT.请求实例如下:POST/token/oauth2HTTP/1.1Host:felord.cnContent-Type:application/x-www-form-urlencodedgrant_type=authorization_code&code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv.ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs场景是什么?根据RFC723的描述,当客户端想要使用已有的JWken来获取可信表达式的语义时,就会使用这种模式。用户批准步骤直接在授权服务器上执行。另外,jwt-bearer也被定义为一种客户端认证机制,用来判断客户端的身份是否合规。客户端使用JWT进行认证和客户端使用JWT进行授权是不同的行为。当然,这两种行为可以结合使用,也可以单独使用。使用JWT的客户端身份验证只是令牌端点的客户端身份验证的替代方法。个人感觉在现有的JWT系统上使用OAuth2.0协议还是比较方便的。总结今天主要分享一下jwt-bearer授权方式的协议。与其他模式相比,jwt-bearer还是很新颖的。虽然还没有被大规模使用,但是在国外的技术社区发现了很多这方面的东西。模式的问题和讨论,看来这个模式还是有些东西的,需要注意一下。本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。
