一次Oauth2授权码集成第三方登录

这是第一次做Oauth2的登录集成,在成功的那一刻有不小的成就感(哈哈)

当然,集成的过程中出现过太多的问题、bug等等。

写这篇blog也算是对Oauth2的总结及回忆吧(就前段时间)。

首先,我们要知道Oauth2和SSO的区别,SSO是登录自己公司的多个产品,而OAuth2.0是访问第三方资源的一种标准方式。我这次用到的是Oauth2最经典的授权码模式

其次,我们需要知道授权服务器的接口地址,以及本应用在授权服务器上的注册app_id,和app_secret 这些信息都是需要提前注册好的。

1、我们需要在本地代码写一个类比如xxxcompone,来提供接口方法向授权服务器发送各种请求,比如说getCode、getAcceptToken或者要求的其他认证信息等等。若是想要集成多个第三方,可建一个抽象父类,提供一个app_name属性区分,同时提供抽象方法和配置信息等等,每一个xxxcompont继承父类,i写入自己的app_name等等,至于具体的实现方法自己写,网上一大堆。

2、在登录页面写一个button,因为没有专门做过前端,只是写了一个a标签,嵌套一个butten就可做按钮请求跳转,这里不推荐写死去请求授权码太不灵活了。推荐跳转本地接口,用代码完成请求授权码地址的创建以及重定向(需要带一些请求参数,不然人家不认你,如client_id、redirect_uri)。

3、重定向到身份认证,登陆成功后,会重定向到redirect_uri返回code(即授权码,在uri里面),而redirect_uri需要接收code,携带code和app_secret等参数调用getAcceptToken,获取acceptToken。这里需要注意的是,这个app_secret一定要后端发起,因为app_secret是一个凭证,存在泄露风险。

4、获取到acceptToken,可以做出登录成功的判断了,存入登录信息等等,我这里需要携带acceptToken再次请求获取到scope信息获取出user的状态后,才可存入登录状态,判断登陆成功

5、在其中对授权服务器的请求,可加入state参数,通过判断state用于保持请求和回调的状态。可防止 csrf 攻击。另外还有一些固定字段,这里就不多说了,相信且希望你们做oauth的时候也有文档可看。 大致流程如上。