我有一个Azure混合连接,该连接应该连接到某些本地服务并将其公开给我的应用程序服务。但是,安装程序在某处失败,并且我正试图缩小问题的范围。
作为此过程的一部分(并且因为将来对我很有用),我正在尝试使用SoapUI调用底层的本地服务,但是最初的GET请求应该可以给我WSDL却给了我一个身份验证错误:
GET https://my-relay.servicebus.windows.net/my-endpoint/my-service.svc?wsdl
{
"error": {
"code": "TokenMissingOrInvalid",
"message": "MissingToken: Relay security token is required. TrackingId:b58c004c-e0e6-4dd0-a233-e0d304795e4e_G21, SystemTracker:my-relay.servicebus.windows.net:my-endpoint/my-service.svc, Timestamp:2019-03-05T10:17:26"
}
}
我从哪里获得中继安全令牌,如何将其告知SoapUI?
答案 0 :(得分:0)
本指南可能会为您提供所需的答案。
https://www.soapui.org/soap-and-wsdl/authenticating-soap-requests.html
我怀疑您的普通应用会以当前系统上的当前用户身份自动访问Web服务。如果是这样,我相信您应该查看NTLM身份验证。
答案 1 :(得分:0)
您需要创建一个安全令牌并将其传递到请求的标头中。
类似这样的东西:
var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(KeyName, Key);
var uri = new Uri(string.Format("https://{0}/{1}", RelayNamespace, ConnectionName));
var token = (await tokenProvider.GetTokenAsync(uri.AbsoluteUri, TimeSpan.FromHours(1))).TokenString;
var client = new HttpClient();
var request = new HttpRequestMessage()
{
RequestUri = uri,
Method = HttpMethod.Get,
};
request.Headers.Add("ServiceBusAuthorization", token);
var response = await client.SendAsync(request);
对于SOAPUI,您需要将结果令牌值添加到名为“ ServiceBusAuthorization”的标头中。