对 OAuth2 和非标 DingDing OAuth2 的一次尝试

印象中工做以来还历来没搞过一次 OAuth2 的接入- -,彷佛只停留在愉快的使用阶段。好比如今不少网站都接了 wx 二维码扫码登陆或者微博登陆。因此一直只是享受着这样的便利,却没有机会本身来搞一搞把里面的技术细节打通。html

首先找到 阮一峰老师的一篇古老的文章介绍了一下 OAuth 协议。c#

归根到底 OAuth 要作的事情就是在没有完整用户用户密码的状况下,经过用户受权访问第三方本来提供给用户的服务。后端

好比我要去上知乎,可是我不想注册一个知乎的帐号,经过 OAuth 我能够经过微博的帐号去访问知乎,可是注意这里有一点不太同样,就是当你这么作的时候,一般第三方服务商都会将你 OAuth 的帐号和他们平台上的自动建立的帐号进行绑定,这样能对你的身份进行确认。这是如今最普遍的用法,还有一种就是只经过你的受权去访问第三方的有限的服务。api

 

RFC 6749 标准 OAuth2 流程以下:服务器

 

 

(A)用户打开客户端之后,客户端要求用户给予受权。app

(B)用户赞成给予客户端受权。网站

(C)客户端使用上一步得到的受权,向认证服务器申请令牌。ui

(D)认证服务器对客户端进行认证之后,确认无误,赞成发放令牌。url

(E)客户端使用令牌,向资源服务器申请获取资源。spa

(F)资源服务器确认令牌无误,赞成向客户端开放资源。

一般流程 B 有不少种实现的方法,我这里看了好几家的文档 最经常使用的应该是受权码模式。

可能由于受权码是最完整,流程最严密的受权模式。它的特色就是经过客户端的后台服务器与服务提供商的认证服务器进行互动。

 

 (A)用户访问客户端,后者将前者导向认证服务器。

(B)用户选择是否给予客户端受权。

(C)假设用户给予受权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个受权码。

(D)客户端收到受权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

(E)认证服务器核对了受权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

一个标准的协议在 A 步骤中包含了

response_type:上面谈到的受权类型,因为是受权码因此这里是 "code"

client_id: 标示客户端的应用id 

redirect_uri:验证经过以后须要重定向到的 URI 一般会进行 url encode

scope:表示申请权限的范围。

一个拼好的正常的 url 可能会长这样

https://oapi.ggsimida.com/connect/qrconnect?client_id=xxx&response_type=code&scope=snsapi_login&
state=STATE&redirect_uri=http%3A
//uisensor.hundun.cn/dashboard/

 

一般访问该地址以后咱们会被带到第三方受权公司的认证服务器,要求用户进行受权。用户经过 qrcode 或者帐号密码登陆进行受权以后,会重定向到上面的 redirect_uri 填写的地址而且带上第三方应用发放的 state 和 受权权码。

这个时候就到了 D 步骤,D 步骤经过这个受权码,并附上重定向 URI 像第三方服务器的鉴权系统申请临时访问令牌,而后认证服务器核对信息以后发放 ac令牌和 rr更新令牌,到此便完成了认证。

 

这里要多说一句的是,dingding 的文档上好像并非提供的标准 OAuth2 协议,虽然看上去很像可是并非标准的。包括上面 A 步骤的连接里,dingding 需求一个叫 appId 的东西来替代 client_id ,而且当咱们得到受权码以后,便无需再请求 token ,而是直接使用受权码+应用id+应用密钥看成身份就可直接经过接口认证请求用户信息了。

若是使用的服务是只支持标准的 OAuth2 协议的话,彷佛没法无缝切换 dingding 的这个服务。

可是总有解决办法,个人选择是经过后端服务器包一层,将整个 OAuth2 的标准流程方在包装层,而后由包装层和 dingding 服务器进行交互,这样也能实现。

 

 

Reference:

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

https://ding-doc.dingtalk.com/doc#/serverapi3/mrugr3    dingding 二维码登陆文档

https://www.sensorsdata.cn/_manual/oauth_client.html    sensors 标准 OAuth 文档

相关文章
相关标签/搜索