BBS500

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
BBS500 首页 学习笔记 云服务器相关 查看内容

【ubuntu+oauth2.0+kong+springboot】使用kong网关搭建oauth2.0认证服务器,以及快速 ...

2018-3-30 13:54| 发布者: firstadmin| 查看: 178| 评论: 1

摘要: 搭建条件: 1、kong+dashboard已经搭建完毕。没有搭建的同学可以参照这个链接。 2、服务器安装jdk、git,主要用于使用spring boot快速搭建一下小应用,不会的同学可以参照这个教程。 3、下文如有疑问可以加 ...

搭建条件

    1、kong+dashboard已经搭建完毕。没有搭建的同学可以参照这个链接

    2、服务器安装jdk、git,主要用于使用spring boot快速搭建一下小应用,不会的同学可以参照这个教程

    3、下文如有疑问可以加我qq进行探讨12738022。


使用Letsencrypt配置kong的SSL

    根据kong的要求,如果使用oauth2.0进行接口授权,需使用https进行请求,否则kong会有错误提示”must use https”,而kong的https的端口为8443,下文会使用这个端口进行请求。因此在浩瀚的网络中寻求了一款会被浏览器安全认证的神奇而又免费的SSL,这就是Letsencrypt,详情可以点击此处https://letsencrypt.org/进行了解。

    对于ubuntu服务器来说安装尤为简单,操作步骤如下:

sudo service nginx stop
sudo apt-get update
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
sudo cerbot certonly --standalone --email 12738022@qq.com -d www.hoogwa.com

     执行完毕后会在/etc/letsencrypt/live生成域名同名之目录,如下图

kong配置客户端ssl

将路径如上的文件配置到kong里,kong的目录/etc/kong/kong.conf.default,如图

退出保存后,重新启动kong,最好使用kong start -c /etc/kong/kong.conf.default命令,不要使用kong reload。

    重新启动完成后,急不可耐的撩开浏览器,输入一个熟悉了不能在熟悉的网址https://www.hoogwa.com:8443,在对enter键有力一击后,WTF!亲爱的火狗居然显示的证书未被信任。接下来我重新生成了证书或是重新改过kong的配置文件,甚至在kong的安装目录改过nginx-kong的配置文件,结果还是出奇的一致。最后在kong的安装目录有一个叫.env什么的文件引起了我的注意,经过查看里面包含的证书路径找到了证书,并且和火狗的证书对比,原因终于找到了。

    尽管我在kong的配置文件中设置了letsencrypt的路径,但是kong还是一直调用的默认路径,没办法了,只能出绝招,先删除默认的ssl证书,将letsencrypt生成的两个文件拷贝到默认ssl目录里,名字修改成默认证书路径。至此,火狗上来个F5,终于出现了这个图标,标示ssl配置已经成功。

Kong创建api\plugin\comsumer

在kong中配置api、plugin、comsumer,这里之所以在服务器命令行中采用命令,是因为方便看文章的你,你直接可以copy and enter:

创建api
curl -d "name=cats" \
     -d "uris=/cats" \
     -d "upstream_url=http://www.hoogwa.com:5000/greeting" \
     http://127.0.0.1:8001/apis/
api上配置插件oauth2
curl -d "name=oauth2" \
     -d "config.scopes=email, phone, address" \
     -d "config.mandatory_scope=true" \
     -d "config.enable_authorization_code=true" \
     http://127.0.0.1:8001/apis/cats/plugins/
增加consumer
curl -d "username=thefosk" \
     http://127.0.0.1:8001/consumers/
在consumer中设置oauth2应用
curl -d "name=Hello World App" \
     -d "redirect_uri=http://www.hoogwa.com:5000/greeting" \
     http://127.0.0.1:8001/consumers/thefosk/oauth2/

完毕以后,如图使用dash-board即可看见刚才的api和consumer:

POSTERMAN测试接口

如遇上图,标示此阶段工作已毕,咱们走着瞧之前,我们可以用postman进行检测一下,如图:

上图所示,认证服务器已经认证通过返回了跳转链接,并带了一个code的参数,我们现在用code去换accesstoken:

上图已经成功请求并返回了token和freshtoken,既然fresh,我们一不做二不休,干脆在来一个freshtoken:

成功刷新token如上图。

业务逻辑:

    1、用户点击一个链接,比如qq登录,页面会跳转到qq的登录界面,kong使用的这个地址带上参数就能获得事先设置的应用名称:

通过代码就会获取到应用的名称,并赋值到模板上如图:

其对应的html代码为:


<form action="/doauth" method="post"><input type="hidden" name="_csrf" value="461c3897-fc78-4358-9b0e-d0519dac5b05"/>
  <input type="hidden" name="client_id" value="90iAkfMRqmO2oV891eUygLP0awTCsHri" />   //通过点击授权获得
  <input type="hidden" name="response_type" value="code" /> //写死code,根据plugin设置来
  <input type="hidden" name="scope" value="email%20address" />  //上图该是在端口为1500应用登录后的页面,登录后会获得比如email、address、用户id(待完成)
  <input type="hidden" name="provision_key" value="function" />  //预先生成,写死
  <input type="hidden" name="authenticated_userid" value="3453" />   //通scope注释
  <input type="submit" value="授权" />
</form>

点击授权成功跳转到一个应用或者另一个方法,如下图:

至此,在oauth中设置的跳转地址成功执行,这里可以使用上面的code获得token或者刷新token进行访问,具体实现包括登录模拟返回用户信息与token使用等待下回分解。


特别贡献kong的几个常用的地址:

通过client_id获取应用信息:http://www.hoogwa.com:8001/oauth2?client_id=90iAkfMRqmO2oV891eUygLP0awTCsHri

获取code地址:https://www.hoogwa.com:8443/cats/oauth2/authorize?client_id=90iAkfMRqmO2oV891eUygLP0awTCsHri&response_type=code&scope=email%20address&provision_key=function&authenticated_userid=userid123

获取token地址:https://www.hoogwa.com:8443/cats/oauth2/token?grant_type=authorization_code&client_id=90iAkfMRqmO2oV891eUygLP0awTCsHri&client_secret=8WGY8xLpwQr75jse27duucnLqSsrxbcO&redirect_uri=http://www.hoogwa.com:5000/greeting&code=GJvugP9vCvWiggEFI9k51ZECIPnFTHdP

刷新token地址:https://www.hoogwa.com:8443/cats/oauth2/token?grant_type=refresh_token&client_id=90iAkfMRqmO2oV891eUygLP0awTCsHri&client_secret=8WGY8xLpwQr75jse27duucnLqSsrxbcO&refresh_token=QYowhj38XJKLF7R2PJorOsgPUMjTJs09



鲜花

握手

雷人

路过

鸡蛋
发表评论

最新评论

引用 firstadmin 2019-8-5 14:02
Let’s Encrypt证书续期

生成的免费证书为3个月时间,使用 certbot renew 可以无限免费续签 Https 证书。
为了方便,我们可以使用crontab进行自动续期。注意在使用certbot renew的时候,要先关闭nginx才能成功。

查看全部评论(1)

QQ|Archiver|手机版|小黑屋|BBS500 ( 蜀ICP备16012380号-1 )

GMT+8, 2019-10-19 15:10 , Processed in 0.018872 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部