Skip to content

Dubbo调用鉴权认证方案 #5461

Closed
Closed
@CodingSinger

Description

@CodingSinger

基本需求:

  • 一些敏感服务的provider,只允许经过授权的consumer应用发起的调用,不允许匿名调用。

方案设计:

  1. 基于AK/SK,即Access Key ID和Secret Access Key。
  2. AK/SK需要应用启动时向鉴权服务拉取,定期更新。为保证安全,用HTTPS通信。
  3. 签名和验签基于filter。

dubbo-auth.png

细节说明

  1. 签名过程,调用方可选择签名策略,选择根据调用元信息签名(方法信息、接口信息)和混合参数签名方法。

  2. 验签过程:provider收到调用请求时,根据AK查询缓存的SK(如果没有对应的AK,则立刻同步一次鉴权服务),并用同样方法计算signature,检查signature是否相同, 通过则执行调用,否则抛出异常。

鉴权服务接口设计

鉴权服务是Dubbo的外部服务,进行统一管理AK/SK,并为Dubbo应用提供AK/SK下发。

接口地址https://ip:80/secrets/{appName}

请求方式: GET

返回数据格式: JSON

返回数据定义:

 {
        "cumsomer":[  // 申请到访问其他服务的AK/SK对
            {
                "accessKey":"", // AK
                "secretKey":"", // SK
                "consumerSide":"", // 消费端appname
                "providerSide":"", // 服务端appname
                "timestamp":"",   // 有效期
                "options":""     // 其他信息
            }
        ],
        "provider":[   // 自己提供出去承认其他应用访问的AK/SK对
            {
                "accessKey":"", // AK
                "secretKey":"", // SK
                "consumerSide":"", // 消费端appname
                "providerSide":"", // 服务端appname
                "timestamp":"",   // 有效期
                "options":""     // 其他信息
            } 
        ]
        
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions