函数计算 jwt的配置可以给个例子吗?

函数计算 jwt的配置可以给个例子吗?文档上没例子,没试成功 1-6607d7ee-154d6517-2ba15f664b3cfc170da7124b00b34e375f52e2d65941.png

展开
收起
真的很搞笑 2024-04-02 18:35:13 59 分享 版权
阿里云 AI 助理回答

在阿里云函数计算中配置JWT认证需要按照一定的步骤进行操作,以下是一个详细的配置示例,帮助您成功完成JWT的设置。


1. 配置JWT认证的基本流程

JWT认证的核心是通过JWKS(JSON Web Key Set)来验证客户端请求中的Token。以下是具体的操作步骤:

步骤一:生成JWKS

  1. 使用在线工具(如mkjwk.org)生成JWKS。

    • 在生成界面选择以下参数:
      • Key UseSignature
      • AlgorithmRS256
      • Show X.509Yes
    • 点击“Generate”按钮生成密钥对。
    • 保存生成的Private Key(用于签发JWT Token)和Public Key(用于配置JWKS)。

    示例JWKS内容如下:

    {
     "keys": [
       {
         "alg": "RS256",
         "e": "AQAB",
         "kty": "RSA",
         "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR-dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ",
         "use": "sig"
       }
     ]
    }
    
  2. 将生成的Public Key内容填入函数计算控制台的JWKS配置项中。


步骤二:配置HTTP触发器的JWT认证

  1. 登录阿里云函数计算控制台,进入目标服务和函数的详情页面。
  2. 在触发器管理(URL)页签中,找到目标HTTP触发器,点击“编辑”按钮。
  3. 在编辑触发器面板中,设置以下配置项:

    • 认证方式:选择“JWT 认证”。
    • JWKS:将上一步生成的JWKS内容粘贴到输入框中。
    • JWT Token 配置
      • Token位置:选择Token所在的位置(Header、Cookie、Query参数或表单参数)。
      • 参数名称:填写Token的名称(例如Authorization)。
      • 去除前缀:如果Token前有固定前缀(如Bearer),请在此处填写前缀,并注意前缀后加一个空格(例如Bearer)。
    • JWT Claim 转换
      • 选择透传给函数的参数位置(Header、Cookie、Query参数或表单参数)。
      • 设置参数的原始名称和透传后的名称。
    • 请求匹配模式
      • 匹配全部:所有请求都需要JWT校验。
      • 白名单模式:指定路径的请求不需要JWT校验。
      • 黑名单模式:指定路径的请求需要JWT校验。
      • 支持精确匹配和模糊匹配(使用通配符*)。
  4. 点击“确定”保存配置。


步骤三:生成并验证JWT Token

  1. 生成JWT Token: 使用生成的Private Key签发JWT Token。以下是一个Python示例代码:

    import jwt
    import time
    
    # 定义私钥
    private_key = """-----BEGIN PRIVATE KEY-----
    MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7UtWCiiZ6R04x8HWU
    R73o4d6F3hdE0JtlGb3pGrA5hNNzbxJz9TnApXa6YPOiV+gjrzZy3YE2dFFqFiBk+Fsw
    LMdjOqLyxFeeP0aHHdAfD3OtgAK0CvBDGtMWJ6Nt/MO8Z0+sxCDtPzCO0u2RLIOYLJ5el
    sh3CbG4vK39qEt8d6Wv3iQSSwwNrfZXgWLlsxrhwi45RCswRBxphXU/FGyzwr6YLDPOCS
    ut3uYn3XiPTXWnWwvGTIn50UK6NPgCFFHIzPGD2faX6dknZlpjNstS0Bbn9TaR9FWQM1r
    x3WD//ZXnONjqd8snVLcyhcxCBjPeHpEehZVu2kNaSFvDUQ==
    -----END PRIVATE KEY-----"""
    
    # 定义Payload
    payload = {
       "sub": "user123",  # 用户标识
       "iat": int(time.time()),  # 签发时间
       "exp": int(time.time()) + 3600  # 过期时间(1小时)
    }
    
    # 签发Token
    token = jwt.encode(payload, private_key, algorithm="RS256", headers={"kid": "my-key-id"})
    print("Generated JWT Token:", token)
    
  2. 验证HTTP服务

    • 使用Postman工具测试HTTP触发器是否可以正常访问。
    • 获取HTTP触发器的公网访问地址,将其填入Postman的URL位置。
    • 在Postman的Headers中配置Token参数信息,例如: | 名称 | 示例值 | |--------------|---------------------------------------------------| | Key | Authorization | | Value | Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... |
  3. 发送请求,检查是否能够成功访问HTTP服务。


常见问题排查

  1. 错误提示:invalid or expired jwt

    • 可能原因:
      • Token签名无效。
      • Token已过期。
      • Token中的kid与配置的JWKS不匹配。
    • 解决方法:检查Token的生成逻辑,确保使用正确的私钥和算法。
  2. 错误提示:the jwt token is missing

    • 可能原因:
      • 请求中未携带Token。
      • Token的位置或名称配置不正确。
    • 解决方法:检查HTTP触发器的JWT Token配置,确保与请求中的Token一致。
  3. 开启JWT认证后是否会产生额外费用?

    • 不会产生额外费用,函数计算默认提供的网关相关功能计费包含在函数调用次数中。

通过以上步骤,您可以成功配置并验证函数计算的JWT认证功能。如果仍有问题,请检查每一步的配置细节,确保无误。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

快速交付实现商业价值。

还有其他疑问?
咨询AI助理