使用WSO2-AM进行JWT处理

时间:2018-01-18 13:26:30

标签: api oauth wso2 jwt wso2-am

我们计划推出API管理解决方案,目前我们正在使用WSO2 AM设置概念验证。我们希望使用WSO2 API网关来检查是否允许某个消费者应用程序使用API​​并限制请求率。 我在身份工作流程上工作,我想知道一个消费的应用程序如何将JWT令牌传递给后端服务,其间有WSO2-AM。

首先,这是我们目前的情况:

Without API gateway

  1. 消费应用程序从身份提供者处获取其碳用户的JWT令牌。 JWT包含一些关于用户的声明,例如他/她所属的角色。
  2. 应用程序调用服务并在Authorization HTTP标头中传递JWT令牌,如:Authorization:Bearer
  3. 该服务验证JWT的发行人和签名,并从中检索索赔。
  4. 所以,这非常简单。现在我们在应用程序和服务之间放置一个API网关:

    With API gateway

    1. 消费应用程序从身份提供商处获取其碳用户的JWT令牌。
    2. 使用的应用程序使用OAuth2获取以下API调用的访问令牌。我们可以使用client_credentials grant类型,只需传递客户端ID和客户端密钥。我还没有尝试过,但我们可以使用JWT授权类型(请参阅https://docs.wso2.com/display/ISCONNECTORS/Configuring+JWT+Grant+Type)并使用JWT将用户信息传递给API网关。
    3. 使用JWT授权类型时,API网关会根据身份提供者的公钥验证JWT。
    4. 将访问令牌返回给应用程序。
    5. 应用程序向网关发送API请求,并在授权HTTP标头中传递访问令牌。
    6. 网关验证访问令牌。
    7. 网关将API请求转发给服务。
    8. 还有我的问题:JWT怎么能从1/2。被传递给服务?

      有一个文档,用于使用JWT"将最终用户属性传递给后端。 (参见https://docs.wso2.com/display/AM210/Passing+Enduser+Attributes+to+the+Backend+Using+JWT),但这将引入由WSO2-AM发布和签署的新JWT,我不确定此JWT是否包含用于创建访问令牌的JWT的所有信息(甚至是最初的JWT。)

      我能想到的另一种方法是使用自定义HTTP标头将JWT通过网关传递给服务。我不能使用Authorization标头(因为我们没有API网关),因为WSO2-AM需要该标头中的访问令牌。

      由于我对这两种解决方案都不满意,我想问专家:你会如何解决这个问题?

      谢谢, 托

1 个答案:

答案 0 :(得分:2)

我能想到的唯一可能性是在后端服务的自定义标头中发送JWT令牌。