首先吐槽.. 司职iOS开发 来弄这个实在有些头痛。很多东西流程都清楚 但不是不知道怎么下手 就是用错方法整出更多问题。
正题:
我使用的是Java + Apache Tomcat 7.* + MyEclipse进行开发。
使用的OAuth2.0 Oltu版 下载地址:http://oltu.apache.org/download.html
下载后取自己需要的文件到自己项目(当时真的是一直以为会有jar包之类的,找了老半天。眼睛都花了。原来只有文件)
简单介绍下OAuth授权的流程(以天猫精灵授权为例)
1、天猫精灵通过授权页面发起授权请求
2、我方服务器返回code
3、天猫精灵通过code向我方请求accesstoken。
4、我方返回accesstoken等
流程简单来说就是这样了。而且流程规定的验证code、accesstoken这些因为也是我方自己进行验证 所以并不会真的影响到授权进行不下去(当然这样就不能说是授权了,单纯的是应付天猫精灵的流程.建议最后该验证最后还是验证一下。)
我对OAuth2.0 源文件的作用的理解:其实就只是提供算法生成accesstoken等。所以所谓授权我觉得和OAuth关联不是很大。不必纠结于OAuth源代码、工作流程之类的。
*****天猫精灵实际对接*****
1、从天猫精灵技能真机测试页面打开授权界面,会阿里会拼接一些参数到链接后面(redirect_uri、client_id、response_type、state),对redirect_uri 解码。
2、传递这些参数到我方生成code的文件进行拼接code。得到一个链接(https://open.bot.tmall.com/oauth/callback?client_id=***&response_type=***&state=***&code=***)
3、跳转到上述得到的链接(真的这一步耗我最TM多的时间。跳转吗 我就重定向.结果就跨域。我TM就去解决跨域。网上各种方法都没效果。我就想这么会这么难搞??群里开发的都这么厉害吗,我感觉棘手的问题都那么轻松就弄过去了???我就暂时放弃跨域这个方向,从js方向看看,最后看到有文章说加载页面不会有跨域问题!!!!最后解决。艹当时就想几个字的事情不能强调下吗。好像跨域是要对方服务器支持才行?)
4:、跳转过后天猫精灵访问获取accesstoken页面获取accesstoken(accesstoken访问链接必须是https的,最后说https怎么弄。其实很简单)
oauthIssuerImpl = new OAuthIssuerImpl(new MD5Generator());
final String accessToken = oauthIssuerImpl.accessToken();
final String refreshToken = oauthIssuerImpl.refreshToken();
5、前四步授权流程其实已经走完了。天猫精灵和服务器最后的一步就是和网关的通讯。和前面的一样 也是一个地址。就是一个请求和返回的过程了。如天猫精灵发送获取设备列表的请求。我们返回设备列表数据。天猫精灵发送控制设备请求,我们返回结果数据。
******https*****
配置https必须的东西:域名、认证的ssl证书。
1、申请好域名后,去https://freessl.org/这个地址申请免费的认证的证书。
2、申请证书步骤很简单,就是还需要一个DNS验证 点击创建免费的ssl证书后跳转到另一个界面,这个界面会得到一个TXT记录和记录值,去你申请域名的地方,在域名解析添加一个项,填上TXT记录和记录值。等一分钟就可以验证,然后下载证书了。
3、下载证书后转换下格式:pem-》jks。https://myssl.com/cert_convert.html
4、把jsk证书粘贴到Apache Tomcat的conf文件夹下
5、修改conf文件夹下的server.xml文件。找到一个8443的端口,放开注释,这是一个https端口的写法.默认https端口是443.在这个Connector下添加jks路径和密码,有可能要修改protocol(默认的意思就是和80一样加https://域名 不写端口就默认是443)
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/你的文件名.jks" keystorePass="你的密码" />
6、重启服务器 就可以了