OAuth2 JWT 认证
介绍
OAuth2 JWT 认证是 OAuth 2.0 身份认证方案之一,允许客户端通过 JSON Web Token(JWT)进行身份验证。
OpenResty Edge 中提供了对应的页面规则动作来实现此功能。
这个动作有以下参数:
- 关键字:用于指定关键字的类型,取值有:探测、对称秘钥、公钥。
- 选择
探测
时,会要求输入探测 URL。如 https://accounts.google.com/.well-known/openid-configuration。这是一种发现 OAuth2 配置信息的方式。它允许客户端在不与认证服务器直接交互的情况下,自动获取 OAuth2 协议需要的信息,例如授权服务器的地址,令牌端点和令牌签名公钥。 - 选择
对称秘钥
时,会要求输入秘钥。 - 选择
公钥
时,会要求输入公钥。
- 选择
- 接受不支持的算法:如果要拒绝使用不支持算法签名的令牌,请不要开启这个选项。如果开启,则完全无法验证令牌签名。
- 令牌签名算法:用于指定一种或多种令牌签名算法。取值有:HS256、HS512、RS256、RS512、ES256、ES512、none。
示例
- 我们使用对称秘钥来进行演示,因此这里类型选择
对称秘钥
。 - 加密算法选择 HS256,这是一种对称密钥的散列算法(使用 SHA-256 的 HMAC)。
发送一个不带认证信息的请求:
$ curl http://test.com/anything -v
...
< HTTP/1.1 403 Forbidden
...
可以看到返回了 403 状态码,表示缺少认证信息或认证信息不正确,禁止访问。
然后发送一个带有错误的认证信息的请求:
$ curl http://test.com/anything -H 'Authorization: Bearer invalid-token' -v
...
< HTTP/1.1 403 Forbidden
...
同样返回了 403 状态码。
接着再发送一个带正确认证信息的请求:
$ curl http://test.com/anything -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmb28iOiJiYXIifQ._FOTfoCTzKHWcBDYf1rfRkg-g6D_Mg8dnccLR_geCH0' -v
...
< HTTP/1.1 404 Not Found
...
返回了 404 而没有返回 403,表示已经通过了认证,但请求访问了不存在的资源(/anything)。