我正在尝试使用http协议从DataPower向Azure服务总线发送消息。我应该如何传递凭据,因为我收到了未经授权的错误401.
因为我被困在这里请帮忙
由于
答案 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创建命名空间,如下所示:
有关详细信息,请参阅此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令牌
答案 2 :(得分:0)
我找到了解决方案。以下是我如何实现SAS身份验证令牌。
使用需要4个参数的Java模块在IIB中生成SAS令牌:
一个。 Azure Service Bus的资源URI
湾重点
C。钥匙名称
d。到期时间为秒。
在MQRFH2标头中设置SAS令牌并发送到DataPower
使用以下xslt提取SAS令牌并在DataPower中设置为HTTP POST请求的授权标头。
<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"/>