Azure webhttprelaybinding授权问题

问题描述 投票:0回答:1

我偶然发现了一个令人讨厌的天蓝色wcf http中继问题,我似乎无法解决。

当我将安全性RelayClientAuthenticationType设置为RelayAccessToken时,就会出现此问题,由于“无效的标头:该请求缺少WRAP授权凭证”,我的端点无法访问。错误,似乎无法解决。

如果我将安全性设置为“无”,则没有问题。我目前正在使用Postman来测试服务。

下面是应用程序(.net 4.6.2控制台应用程序的所有相关详细信息,在此先感谢:)

App.config

<services>
      <service name="XXXXX" behaviorConfiguration="servicebehavior">
        <endpoint address="https://XXXXX.servicebus.windows.net/relayserver" binding="webHttpRelayBinding" contract="XXXXX" behaviorConfiguration="behavior" bindingConfiguration="default" />
      </service>
    </services>
    <bindings>
      <!-- Application Binding -->
      <webHttpRelayBinding>
        <binding name="default">
          <security relayClientAuthenticationType="RelayAccessToken"/>
        </binding>
      </webHttpRelayBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="servicebehavior">
          <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="behavior">
          <transportClientEndpointBehavior>
            <tokenProvider>
              <sharedAccessSignature keyName="RootManageSharedAccessKey" key="XXXX" />
            </tokenProvider>
          </transportClientEndpointBehavior>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
  <appSettings>
    <!-- Service Bus specific app setings for messaging connections -->
    <add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=https://XXXX.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXX" />
  </appSettings>

打开主机

var host = new System.ServiceModel.Web.WebServiceHost(typeof(XXXXX));
host.Open();

Console.WriteLine("Press ENTER to close");
Console.ReadLine();
host.Close();

Azure中继防火墙设置

允许从所有网络访问

测试继电器:测试方法(接口)

[OperationContract, WebGet(UriTemplate = "?id={id}&key={key}", ResponseFormat = WebMessageFormat.Json)]
FakeData GetFakeData(string id, string key);

测试结果

如果我将relayClientAuthenticationType设置为None,则会得到预期的json响应。

<security relayClientAuthenticationType="None"/>

如果将relayClientAuthenticationType设置为RelayAccessToken,则会出现未经授权的错误。

<security relayClientAuthenticationType="RelayAccessToken"/>
<Error>
    <Code>401</Code>
    <Detail>MalformedToken: Invalid authorization header: The request is missing WRAP authorization credentials. TrackingId:..</Detail>
</Error>
azure relay webhttprelaybinding
1个回答
0
投票

问题已修复:我制作的访问令牌中有错字:使用以下方法在C#中创建了一个新的访问令牌:docs.microsoft.com/zh-cn/rest/api/eventhub/generate-sas-令牌

© www.soinside.com 2019 - 2024. All rights reserved.