DataPower - Azure服务总线集成

时间:2017-03-22 11:06:33

标签: azureservicebus ibm-datapower

我正在尝试使用http协议从DataPower向Azure服务总线发送消息。我应该如何传递凭据,因为我收到了未经授权的错误401.

因为我被困在这里请帮忙

由于

3 个答案:

答案 0 :(得分:0)

这取决于您是否为服务总线使用 $target_dir = 'uploads/'; $target_file = $target_dir . basename($_FILES["filepath"]["name"]); $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); move_uploaded_file($_FILES["filepath"]["tmp_name"], $target_file); (SAS)或Shared Access Signatures(ACS)。

我建议使用SAS!

不幸的是,Azure Node.js SDK有很多fs(文件系统)调用,DataPower GatewayScript无法处理这些调用,因此我们无法使用它。

这是我在某处找到的一个片段,我用SAS作为GatewayScript来创建标题:

Access Control Service

我刚刚从另一个项目中提取代码,因此您需要在其上添加一些处理程序和GatewayScript框架...

答案 1 :(得分:0)

正如这位官员document提到的有关Service Bus身份验证和授权的内容:

  

应用程序可以使用共享访问签名(SAS)身份验证或通过 Azure Active Directory访问控制(也称为访问控制服务或ACS)对Azure Service Bus进行身份验证)。

     建议使用

SAS ,因为为Service Bus提供了一种简单,灵活且易于使用的身份验证方案。应用程序可以在不需要管理授权用户概念的情况下使用SAS。"

1)共享访问签名

令牌采用以下格式:

SharedAccessSignature sig=<signature-string>&se=<expiry>&skn=<keyName>&sr=<URL-encoded-resourceURI>

使用共享访问签名(在HTTP级别)sending message

POST http{s}://<yournamespace>.servicebus.windows.net/<path>/messages
Authorization: SharedAccessSignature sr=https%3A%2F%2F<yournamespace>.servicebus.windows.net%2F<path>&sig=<your-signature>&se=1438205742&skn=KeyName
ContentType: application/atom+xml;type=entry;charset=utf-8

有关详细信息,您可以参考此tutorial根据您的开发语言生成SAS令牌。

2)访问控制服务(ACS)

您必须使用New-AzureSBNamespace PowerShell cmdlet创建命名空间,如下所示:

enter image description here

有关详细信息,请参阅此blog

使用ACS发送消息:

POST http{s}://<yournamespace>.servicebus.windows.net/<path>/messages
Authorization: WRAP access_token={swt}
ContentType: application/atom+xml;type=entry;charset=utf-8

构建SWT令牌

enter image description here

有关获取SWT令牌的详细信息,您可以参考此blog和此tutorial,了解如何从ACS请求令牌。

答案 2 :(得分:0)

我找到了解决方案。以下是我如何实现SAS身份验证令牌。

  1. 使用需要4个参数的Java模块在IIB中生成SAS令牌:

    一个。 Azure Service Bus的资源URI
    湾重点
    C。钥匙名称 d。到期时间为秒。

  2. 在MQRFH2标头中设置SAS令牌并发送到DataPower

  3. 使用以下xslt提取SAS令牌并在DataPower中设置为HTTP POST请求的授权标头。

  4. <xsl:variable name="entries" select="dp:request-header('MQRFH2')" />
    <xsl:variable name="header" select="dp:parse($entries)" />
    <xsl:variable name="SAS">
    <xsl:choose>
    <xsl:when test="$header//usr//SAS">
    <xsl:value-of select="$header//usr//SAS" />
    </xsl:when>
    <xsl:otherwise>
    <xsl:value-of select="false()" />
    </xsl:otherwise>
    </xsl:choose>
    </xsl:variable>
    <dp:set-http-request-header name="'Authorization'" value="$SAS"/>