如何在WSO2上发布WSO2 API?

时间:2017-02-09 09:48:09

标签: wso2

我有特殊要求。 我想访问WSO2 backen API。 所以,我想在WSO2上发布它。 这样,我的服务就可以访问WSO2' API。 有人可以告诉我该怎么做吗?

7 个答案:

答案 0 :(得分:2)

WSO2 API Manager为发布和订阅等操作公开REST API。您可以在此处查看所有服务的列表:https://docs.wso2.com/display/AM200/Published+APIs

它还为这些相同的API提供了Swagger定义文件:https://raw.githubusercontent.com/wso2/carbon-apimgt/v6.0.4/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher/src/main/resources/publisher-api.yaml

我还没有尝试过,但考虑到在WSO2中发布托管API所需要的只是一个Swagger文件和一个现有端点,没有什么能阻止你为自己内部的WSO2 APIM创建一个API

答案 1 :(得分:1)

理论上,这应该没问题。

WSO2 API管理器为其自己的API扮演中间件角色,就像任何其他第三方API一样。

假设您要通过api管理器本身发布api管理器的任何Admin API。您只需要像对任何其他API一样添加端点信息。 然后,一旦用户想要访问api,他们必须首先通过调用令牌端点获取访问令牌,然后使用该令牌执行已发布的api。

答案 2 :(得分:0)

访问您的API管理器:http://localhost:9443/publisher

  • 点击您的api
  • 点击“生命周期”标签
  • 点击“发布”

答案 3 :(得分:0)

如果我理解正确,那么在API管理器中发布WSO2 AM API毫无意义。第一个原因是WSO2 AM API已通过基本身份验证访问,而WSO2 AM默认未实现。 WSO2的API的默认安全性是OAuth2,因此您必须对此进行扩展。您可以在这里查看:https://docs.wso2.com/display/AM260/apidocs/publisher/#guide

此外,这些用于WSO2 AM的内部API应该由管理员来访问,因此没有任何理由将其公开为供其他脚本使用的API。

无论如何,如果您实现了可与Basic Auth一起运行的身份验证器,则可以在API Manager中公开此API,或公开这些API禁用默认的OAuth2安全性。

BR

答案 4 :(得分:0)

您应该有一个端点来连接您的API。 然后按照以下步骤

  1. 登录您的API管理器(发布者)实例。
  2. +添加新API
  3. 如果您有端点:单击设计新的Rest API
  4. 填写诸如名称,上下文,版本和描述之类的值。
  5. 添加新的API规范。 (即:GET / test)
  6. 点击下一步:实施
  7. 选择托管API
  8. 端点类型:HTTP / REST端点
  9. 端点:不带上下文填充端点的URL。
  10. 点击下一步:管理
  11. 填充诸如订阅类型之类的值。
  12. 如果您拥有公共API,请不要忘记更改API规范资源的第二列。更改以下值:无
  13. 点击“保存并发布”
  14. 去WSO2商店检查

答案 5 :(得分:0)

在浏览您提供的答案和回复时,我相信您知道如何发布以 WSO2 API 作为端点的 API。但是,您关心的是如何处理授权,因为后端本身需要调用有效的 OAuth 令牌?如果我的理解有误,请指正。

如果是这样,我相信您可以借助自定义中介轻松实现。以下示例中介用于调用令牌端点并生成令牌。生成令牌后,您只需将其添加到请求标头即可。

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="simple-token-gen" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <property description="access_token" expression="get-property('registry', 'local:/api-backend-credentials/pizzaOrderingAPI/access_Token')" name="access_token" scope="default" type="STRING"/>
    <property description="generated_time" expression="get-property('registry','local:/api-backend-credentials/pizzaOrderingAPI/generated_Time')" name="generated-time" scope="default" type="LONG"/>
    <property description="client_credentials" name="app-client-auth" scope="default" type="STRING" value="{base64encoded(clientKey:clientSecret)}"/>
    <property expression="json-eval($)" name="message-body" scope="default" type="STRING"/>
    <property expression="get-property('axis2','REST_URL_POSTFIX')" name="resource" scope="default" type="STRING"/>
    <filter description="" xpath="get-property('SYSTEM_TIME') - get-property('generated-time') > 3600000 or get-property('access_token') = ''">
        <then>
            <payloadFactory media-type="xml">
                <format>
                    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
                        <soapenv:Body>
                            <root xmlns="">
                                <grant_type>client_credentials</grant_type>
                            </root>
                        </soapenv:Body>
                    </soapenv:Envelope>
                </format>
                <args/>
            </payloadFactory>
            <header expression="fn:concat('Basic ', get-property('app-client-auth'))" name="Authorization" scope="transport"/>
            <header name="Content-Type" scope="transport" value="application/x-www-form-urlencoded"/>
            <property description="messageType" name="messageType" scope="axis2" type="STRING" value="application/x-www-form-urlencoded"/>
            <property description="REST_URL_POSTFIx" name="REST_URL_POSTFIX" scope="axis2" type="STRING" value=""/>
            <call blocking="true">
                <endpoint name="token">
                    <http method="post" uri-template="{token-endpoint-url}"/>
                </endpoint>
            </call>
            <property expression="get-property('resource')" name="REST_URL_POSTFIX" scope="axis2" type="STRING"/>
            <property description="generated Time Setter" expression="get-property('SYSTEM_TIME')" name="local:/api-backend-credentials/pizzaOrderingAPI/generated_Time" scope="registry" type="LONG"/>
            <property description="generated_token" expression="json-eval($.access_token)" name="generated-access-token" scope="default" type="STRING"/>
            <property description="new Token setter" expression="get-property('generated-access-token')" name="local:/api-backend-credentials/pizzaOrderingAPI/access_Token" scope="registry" type="STRING"/>
            <header expression="fn:concat('Bearer ', get-property('generated-access-token'))" name="Authorization" scope="transport"/>
            <payloadFactory media-type="json">
                <format>
                    $1
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('message-body')"/>
                </args>
            </payloadFactory>
        </then>
        <else>
            <header expression="fn:concat('Bearer ', get-property('access_token'))" name="Authorization" scope="transport"/>
        </else>
    </filter>
</sequence>

用相应的值替换占位符。

  • {base64encoded(clientKey:clientSecret)} - 客户端密钥和客户端 秘密,由冒号和 base64 编码分隔。 {token-endpoint-url}
  • 后端授权服务器的令牌端点 URL。

我相信这可以帮助您解决问题。

答案 6 :(得分:-1)

WS02 API意味着您是指Wso2 API管理器吗? 因为您还可以使用Wso2 ESB来实现API。

您可以使用Wso2 ESB对API的代码进行更多控制,但必须使用API​​M才能使用ESB进行节流和其他控制。