糕dy带你玩kong-oauth2(完整demo)🐒

直接进入正题吧,这篇文章直接讲构建完整的kong+oauth2协议的例子。 官方地址oauth插件:https://docs.konghq.com/hub/kong-inc/oauth2/。没有写很完整,只是帮大家方便入门下。

1.创建service

官方service相关接口
这里创建一个名为l-o的服务并配置upstream server。upstream可以配置host, port, protocol, path,也可以直接配置url项将其他一次性配置。service相当于nginx的server。
{{url}}变量为http://localhost:8001,即admin api url


楼主这里的返回值为:

{
    "host": "localhost",
    "created_at": 1540941923,
    "connect_timeout": 60000,
    "id": "2354af94-13f5-4e8e-ac44-d52945c53ff1",
    "protocol": "http",
    "name": "l-o",
    "read_timeout": 60000,
    "port": 3000,
    "path": null,
    "updated_at": 1540941923,
    "retries": 5,
    "write_timeout": 60000
}

2.创建route

官方route相关接口
这里简单创建一个'/', route相当于nginx里的location。

{
    "next": null,
    "data": [
        {
            "created_at": 1540942417,
            "strip_path": true,
            "preserve_host": false,
            "regex_priority": 0,
            "updated_at": 1540942417,
            "paths": [
                "/"
            ],
            "service": {
                "id": "2354af94-13f5-4e8e-ac44-d52945c53ff1"
            },
            "protocols": [
                "http",
                "https"
            ],
            "id": "6251b33a-a08f-434d-a874-f5e51bfcde45"
        }
    ]
}

这是已经可以通过kong访问本地的3000端口了,楼主使用java(方便后续获取用户信息),启动完毕后,访问kong的资源接口。
这里{{uurl}}是kong的资源访问接口http://localhost:8000。Host为service中的host值。

3.为service添加插件

官方plugin相关接口
这里有很多配置项,建议详细看官方文档。scope可以由系统切分模块后配置,例如: read, write。如果我们使用密码授权,一定要设置enable_password_grant为true,因为默认为false

{
    "created_at": 1540971779000,
    "config": {
        "refresh_token_ttl": 1209600,
        "scopes": [
            "email",
            "phone",
            "address"
        ],
        "mandatory_scope": true,
        "provision_key": "DKQv6RHW9E8QtvXBxjnY9elCAXyLEX1K",
        "hide_credentials": false,
        "enable_authorization_code": true,
        "enable_implicit_grant": false,
        "global_credentials": false,
        "accept_http_if_already_terminated": false,
        "enable_password_grant": true,
        "enable_client_credentials": false,
        "anonymous": "",
        "token_expiration": 7200,
        "auth_header_name": "authorization"
    },
    "id": "0450482d-4b1f-4ae1-81aa-7d629276740e",
    "enabled": true,
    "service_id": "2354af94-13f5-4e8e-ac44-d52945c53ff1",
    "name": "oauth2"
}

这时再次访问资源,会报错

{
    "error_description": "The access token is invalid or has expired",
    "error": "invalid_token"
}

4.创建consumer

官方consumer相关接口
consumer消费者和upstream service使用用户的概念不一致哦。

{
    "custom_id": null,
    "created_at": 1540971391,
    "username": "goddy-oauth",
    "id": "8f2e1aa7-e5e8-4977-94e3-246c521044ec"
}

5.consumer下创建application


相当于创建oauth2中的client,理论上每一个upstream service对应一个consumer

{
    "client_id": "oauth2-client",
    "created_at": 1540971653000,
    "id": "a54a5d85-f903-4db7-9b08-0039825a83a7",
    "redirect_uri": [
        "http://www.baidu.com"
    ],
    "name": "oauth2-app",
    "client_secret": "secret",
    "consumer_id": "8f2e1aa7-e5e8-4977-94e3-246c521044ec"
}

6.使用Resource Owner Password Credentials获取token


这里username、password、authenticated_userid,是需要我们自己开发的后端项目(backend)来核对的。

{
    "refresh_token": "kmzuQf7ogfFkD2j6v4Fb13X0dRv723MQ",
    "token_type": "bearer",
    "access_token": "wFNcIS2Jvvqru6uwgUfuBbwV0QUzB8TC",
    "expires_in": 7200
}

这时用获取到的token又可以访问资源啦 Authorization里配置Bearer Token

7.使用Authorization Code获取token

{
    "redirect_uri": "http://www.baidu.com?code=4yYKuC7oW53GEOqSOqpMzeXvqVeCJsTv"
}
{
    "refresh_token": "V6lRoL6QFz0y4wcp6Eng6ziPbCoR0jRz",
    "token_type": "bearer",
    "access_token": "9eukFVdSHvDSmmG4gMjKu1IfYBY4sU5x",
    "expires_in": 7200
}

授权码模式 Authorization Code

=> 1,2,3,4,5,7

密码模式 Resource Owner Password Credentials

=> 1,2,3,4,5,6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容