【问题标题】:Generating consumer key and consumer secret in WSO2 API Manager在 WSO2 API Manager 中生成消费者密钥和消费者秘密
【发布时间】:2014-08-23 14:25:54
【问题描述】:

我想将 WSO2 API Manager 与网站集成,以便用户无需登录 API Store。

据我所知,有一个绊脚石,用户需要点击商店中的“生成”按钮才能首先生成消费者密钥和秘密。

一旦完成,就可以调用订阅 API 并生成文档中的令牌 API:

$ curl -b cookies http://localhost:9763/store/site/blocks/subscription/subscription-list/ajax/subscription-list.jag?action=getAllSubscriptions
{
   "error" : false,
   "subscriptions" : [
      {
      {
         "sandRegenarateOption" : true,
         "prodKey" : "2486e65cbac4e372fb319375744fb",
         "subscriptions" : [
            {
               ...
               "prodConsumerSecret" : "Tx9i9WYu6_a3qqW08bF7jEG660",
               "prodConsumerKey" : "VfS5r5u4rFhec2vVBlFosxRgcE",
               "prodAuthorizedDomains" : "ALL"
               ...
            }
         ],
         ...
         "prodConsumerSecret" : "Tx9i9WYu6_a3qqW08bF7jEG660",
         "prodConsumerKey" : "VfS5r5u4rFhec2vVBlFosxRgcE"
         ...
      }
   ]
}

但是,在浏览器中单击“生成”按钮之前,上面的值为null

当我尝试使用该建议时:

$ curl -X POST -b cookies http://localhost:9763/store/site/blocks/subscription/subscription-add/ajax/subscription-add.jag -d "action=generateApplicationKey&application=4&keytype=PRODUCTION&provider=admin&tier=Unlimited&version=0.1&callbackUrl=&authorizedDomains="

服务器日志:

ERROR - APIStoreHostObject Error while obtaining the application access token for the application:4
org.wso2.carbon.apimgt.api.APIManagementException: Application should be approved before registering.
    at org.wso2.carbon.apimgt.impl.APIConsumerImpl.requestApprovalForApplicationRegistration(APIConsumerImpl.java:1678)
    at org.wso2.carbon.apimgt.impl.UserAwareAPIConsumer.requestApprovalForApplicationRegistration(UserAwareAPIConsumer.java:34)
    at org.wso2.carbon.apimgt.hostobjects.APIStoreHostObject.jsFunction_getApplicationKey(APIStoreHostObject.java:649)

但是根据 getApplications API,它已经被批准了:

curl -b cookies   http://localhost:9763/store/site/blocks/application/application-list/ajax/application-list.jag?action=getApplications
{
   "applications" : [
      ...
      {
         "tier" : "Unlimited",
         "status" : "APPROVED",
         "callbackUrl" : "",
         "name" : "app2",
         "id" : 4,
         "description" : ""
      }
   ],
   "error" : false
}

还有什么想法吗?

【问题讨论】:

    标签: wso2 wso2-am


    【解决方案1】:

    您可以尝试以下 REST 调用

    curl -X POST -b cookies http://localhost:9763/store/site/blocks/subscription/subscription-add/ajax/subscription-add.jag -d "action=generateApplicationKey&application=DefaultApplication&keytype=PRODUCTION&provider=admin&tier=Unlimited&version=1.0.0&callbackUrl=&authorizedDomains="
    

    【讨论】:

    • 谢谢,它几乎成功了...我收到一条错误消息,在日志中我看到以下内容: ERROR - APIStoreHostObject Error while getting the application access token for the application:4 org.wso2.carbon .apimgt.api.APIManagementException:应用程序应在注册前获得批准。但是根据 application-list/ajax/application-list.jag?action=getApplications API,应用程序显示为已批准:(
    • 我会将此添加到问题中,以便更好地格式化它
    • 谢谢...我花了一段时间才弄清楚我做错了什么...应用程序是应用程序的名称,而对于其他API,它是必需的applicationId.. . 我的坏:)
    • Dan 你能把你的 REST 调用作为评论发表吗
    • 我会将它作为对主要帖子的编辑发布... cmets afaics 中的格式很差
    【解决方案2】:

    我没有看到任何直接的方法来完成这项工作。但是您可以使用 wso2 API 管理器公开的Store API 并检索所有订阅,然后您可以从中过滤所需的 ConsumerKey 和 ConsumerSecret。

    我已经尝试过了,对我来说效果很好:)

    【讨论】:

    • 嗨@Vanji,感谢您的评论。像你一样,我可以获得订阅,如果已经生成了密钥。问题是在不使用浏览器并让用户单击“生成”的情况下生成密钥...
    【解决方案3】:

    您需要在订阅前进行推广。您需要使用“PUBLISHED”状态和“updateStatus”操作调用“/site/blocks/life-cycles/ajax/life-cycles.jag”端点。一旦它处于提升状态,您就可以订阅它。

    【讨论】:

    • 很好奇,因为我通过其他应用程序订阅了另外两个,而且这些看起来还可以。 API 也处于 PUBLISHED 状态,这是我认为您建议需要发生的事情。
      当我有更多时间并发布更新时,我会在周末再次检查所有内容。感谢您的 cmets 和帮助
    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2011-09-08
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多