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)。