0

I have stumbled into an annoying azure wcf http relay issue, which i cant seem to be able to solve.

The issue arises when I set the security relayClientAuthenticationType to RelayAccessToken, which makes my endpoints unreachable due to a "Invalid authorization header: The request is missing WRAP authorization credentials" Error, whhich I Can't seem to solve.

If i set the security to "None", there are no issues. I am currently using Postman to test the service.

Below areall the relevant details of the application(.net 4.6.2 console app), thanks in advance :)

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>

Opening the host

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

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

Azure Relay Firewall settings

Allow access from all networks

Testing the relay: test method (interface)

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

Test Results

If I set relayClientAuthenticationType to None, i get a json response as expected.

<security relayClientAuthenticationType="None"/>

If I set relayClientAuthenticationType to RelayAccessToken, I get an unauthorized error.

<security relayClientAuthenticationType="RelayAccessToken"/>
<Error>
    <Code>401</Code>
    <Detail>MalformedToken: Invalid authorization header: The request is missing WRAP authorization credentials. TrackingId:..</Detail>
</Error>
Dino
  • 11
  • 4
  • Issue has been fixed : I had a typo in the access token i made: Created a new access token in c# using the following method: https://learn.microsoft.com/en-us/rest/api/eventhub/generate-sas-token – Dino May 20 '20 at 20:58

1 Answers1

0

Issue has been fixed : I had a typo in the access token i made: Created a new access token in c# using the following method: learn.microsoft.com/en-us/rest/api/eventhub/generate-sas-token

Dino
  • 11
  • 4