oauth2

准备工作

1、登录界面,在使用oauth2插件前,系统需要保证使用的用户已登录业务系统。(第2步)

2、授权界面,系统需要收集oauth2插件需要的内容,然后post到kong服务器获取token信息和跳转信息。(第3-7步)

即Kong的oauth2插件认证接口只是负责业务逻辑端的认证,不负责界面。

流程说明

  1. 如果需要用到oauth2授权,客户端需要将用户重定向到授权界面(并且需要带有client_id/response_type/scope这些参数)。这是一个授权示例界面:
  2. 在进入授权界面前,业务系统需要保证用户已经成功登录了业务系统。
  3. 客户端需要发送类似如下请求到后端接口。
    curl kong:8001/oauth2?client_id=XXX
  4. 如果用户同意授权,则客户端将发送请求到后端接口(包括client_id/response_type/scope等参数)
  5. 后端接口添加provision_key和authenticated_userid这些参数到请求中,然后POST请求到Kong服务器/oauth2/authorize接口(如果已经有认证header Authorization,则需要一起加到header中)。

    示例如下:

    curl https://your.service.com/oauth2/authorize \
               --header "Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW" \
               --data "client_id=XXX" \            
               --data "response_type=XXX" \        //支持code和token
               --data "scope=XXX" \                //此处scope必须是在Kong插件中配置确定,可以通过空格添加多个
               --data "provision_key=XXX" \        //  此处必须是在Kong插件中配置确定
               --data "authenticated_userid=XXX"    //授权通过的用户ID
               --data "redirect_uri=XXXXXX"        //如果需要跳转链接则传入。

    provision_key是在Kong插件端配置的,authenticated_userid是已经被授权通过的用户ID。

  6. Kong服务器会返回一个JSON结果。认证成功是200状态码,认证失败是401状态码。
     {
             "redirect_uri": "http://some/url"
           }
           {
             "code": "XXXXXXXXX"
           }
  7. 后端需要将用户请求重定向到Kong服务器返回的跳转地址。
  8. 客户端后续只与Kong服务器交互获取access token,不会再与后端服务交互。
  9. 如果已经获取了Access Token,客户端可以发送请求到upstream service获取数据。
  10. 如果Access Token过期了,客户端程序可以调用Kong服务器重新获取Access Token。

    grant_type支持authorization_code、client_credentials、refresh_token、password

    client_id与相关的redirect_uri需要在服务治理端管理。

插件配置字段

字段名 字段类型 默认值 是否必填 说明
scopes string array 用户端权限范围名称列表
mandatory_scope boolean true Y 是否必须选择一个权限范围
provision_key string Y 唯一,授权请求必传,用于和此配置做匹配。
token_expiration number 7200 Y Token有效时间,超过这个时间后需要刷新token
enable_authorization_code boolean false Y
enable_implicit_grant boolean false Y
enable_client_credentials boolean false Y
enable_password_grant boolean false Y
hide_credentials boolean false Y 是否隐藏credentials,因为credentials是kong层面的概念,此处控制是否不传递到后端。
accept_http_if_already_terminated boolean false 默认情况下,只接收HTTPS请求。如果不是HTTPS请求,则需要是可信IP,并且在header中存在x-forwarded-proto=https
anonymous string
global_credentials boolean false 是否所有代理服务共用credential
auth_header_name string authorization AccessToken从这个header中获取值
refresh_token_ttl number 1209600 Y

开启的接口

启动插件后会自动开启如下接口接收请求。

接口名 接口说明
/oauth2/authorize 只支持POST形式。为Authorization Code流程提供authorization codes。或者是为
/oauth2/token POST请求用于获取AccessToken
以上内容是否解决了您的问题?
请补全提交信息!
联系我们

电话咨询

400-151-8800

邮件咨询

fincloud@ocft.com

在线客服

工单支持

解决云产品相关技术问题