添加插件Oauth2
本文参照 https://docs.konghq.com/hub/kong-inc/oauth2/
可以设置为全局的,也可以在单独在service里配置
$ curl -X POST http://<admin-hostname>:8001/plugins/ \
or curl -X POST http://<admin-hostname>:8001/services/<service>/plugins \
--data "name=oauth2" \
--data "config.scopes=email" \
--data "config.scopes=phone" \
--data "config.scopes=address" \
--data "config.mandatory_scope=true" \
--data "config.enable_authorization_code=true" \
--data "config.hash_secret=false"
使用一个consumer‘申请client
$ curl -X POST http://kong:8001/consumers/{consumer_id}/oauth2 \
--data "name=Test%20Application" \
--data "client_id=SOME-CLIENT-ID" \
--data "client_secret=SOME-CLIENT-SECRET" \
--data "redirect_uris=http://some-domain/endpoint/"
oauth2的端口有
endpoints | description |
---|---|
/oauth2/authorize | 授权服务器的端点,为授权代码流提供授权代码,或在启用隐式授权流时提供访问令牌。只支持POST。 |
/oauth2/token | 提供访问令牌的授权服务器的端点。这也是用于客户端凭据和资源所有者密码凭据授权流的唯一端点。只支持POST。 |
/oauth2_tokens | 允许创建新令牌的授权服务器的端点。对迁移很有用(见下面)。 |
/oauth2_tokens/:token_id | 允许读取、修改和删除访问令牌的授权服务器的端点。 |
首先使用 /oauth2/authorize 获取 code令牌,这边遇到404, 必须要用post方法https请求
后端必须将provision_key和authenticated_userid参数添加到client_id、response_type和scope参数中,它将发出POST请求
然后用/oauth2/token端口,
我这里使用的是授权码模式,把grant_type设置为authorization_code,所以多添加一个code参数就好了,
如果是密码登录
web应用程序的后端将发送的用户名和密码进行身份验证客户端和grant_type参数最初由客户端发送的参数,并将使香港在POST请求,oauth2 /令牌端点的配置插件。如果客户端发送了授权头,也必须添加它
拿到token就可以愉快的玩耍了
刷新token
$ curl -X POST https://your.service.com/oauth2/token \
--data "grant_type=refresh_token" \
--data "client_id=XXX" \
--data "client_secret=XXX" \
--data "refresh_token=XXX"
上游添加请求头
当客户端被认证和授权后,插件会在请求被代理到上游服务之前附加一些头信息,这样你就可以在你的代码中识别消费者和最终用户
- X-Consumer-ID(Consumer的Id)
- X-Consumer-Custom-ID (Consumer自定义的id,和X-Authenticated-Userid相同)
- X-Consumer-Username (Consumer的username)
- X-Credential-Identifier (凭据的标识符)
- X-Authenticated-Scope (作用域scopes字符串或数组)
- X-Authenticated-Userid (已向客户端授予权限的登录用户ID)
- X-Anonymous-Consumer (将在身份验证失败时设置为true,并改为设置“匿名”消费者)