我有特殊要求。 我想访问WSO2 backen API。 所以,我想在WSO2上发布它。 这样,我的服务就可以访问WSO2' API。 有人可以告诉我该怎么做吗?
答案 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
答案 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。 然后按照以下步骤
答案 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>
用相应的值替换占位符。
我相信这可以帮助您解决问题。
答案 6 :(得分:-1)
WS02 API意味着您是指Wso2 API管理器吗? 因为您还可以使用Wso2 ESB来实现API。
您可以使用Wso2 ESB对API的代码进行更多控制,但必须使用APIM才能使用ESB进行节流和其他控制。