关于OAuth2.0认证的理解和java实现

来源:互联网 发布:网络上刘皇叔是什么梗 编辑:程序博客网 时间:2024/04/30 03:02

本来想写写自己的理解的,发现没什么必要。。。

原理的话看阮一峰这篇就好:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

例子的一看这一篇:http://jinnianshilongnian.iteye.com/blog/2038646


其实对于之前没接触过认证流程的人来说,直接给你一个“oauth2.0”的概念,看了半天网上的资料你可能也还是会蒙,授权服务器,资源服务器,scope,access_token之类的全知道是什么了,就是不知道"oauth2.0"是什么,不知道scope怎么验证,code,access_token怎么生成的。

其实“oauth2.0”就是一个规则,一个流程,你完全可以什么库都不用自己按照那些请求参数回复参数,自己去实现那些规则,也是在按照“oauth2.0”走。

这次用的org.apache.oltu.oauth2库
去看一下源码,其实就是在实例各种请求时按照oauth2.0规范设置了各种参数要求,参数内容的验证,把请求封装成库里的请求,生成库里的回复,code,和access_token完全是随机生成的,和其他参数无关,没找到是怎么保持唯一性的

比如获取code就OAuthAuthzRequest oauthRequest =newOAuthAuthzRequest(request);

OAuthzRequest的构造方法里就限制了请求里各种参数的内容,是否缺失等。

类似的还有获取access_token的请求,资源服务器的请求等

有些针对认证方式还限制了请求的方式,如OAuthAuthzRequest oauthRequest =newOAuthAuthzRequest(request);自带的实例过程中写死了grant_type是authorization_code的要post请求,要想修改要么不用要么自己写一个OAuthAuthzRequest,重写那个限制地方的方法。


获取access_token后向资源服务器请求资源时,access_token可以用get拼在url上,这种方式十分不建议,可以post,本次是通过bearer的方式,写在header的Authorization里,如

Authorization:Bearer accessToken,获取的时候newBearerHeaderTokenExtractor().getAccessToken(request);

0 1