WCFCore 和 serviceAuthorizationManager 不工作

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

我正在尝试使用 basicHttpBinding 使用 WCFCore 组装 .Net 6 WCF 服务,并且我正在努力添加服务授权管理器。

我的目的是使 WCF 能够读取和验证不记名令牌并使用 OAuth。由于遗留应用程序兼容性,我无法迁移到 REST,因此我需要保留 WCF 但使用不记名令牌。

我现阶段的服务很简单:

[ServiceContract]
public interface IService
{
    [OperationContract]
    string GetData(int value);

    [OperationContract]
    CompositeType GetDataUsingDataContract(CompositeType composite);
}

public class Service : IService
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }

    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        if (composite == null)
        {
            throw new ArgumentNullException("composite");
        }
        if (composite.BoolValue)
        {
            composite.StringValue += "Suffix";
        }
        return composite;
    }
}

// Use a data contract as illustrated in the sample below to add composite types to service operations.
[DataContract]
public class CompositeType
{
    bool boolValue = true;
    string stringValue = "Hello ";

    [DataMember]
    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }

    [DataMember]
    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }
}

我的程序.cs:

    var builder = WebApplication.CreateBuilder();

builder.Services.AddServiceModelServices();
builder.Services.AddServiceModelConfigurationManagerFile("wcf.config");
builder.Services.AddServiceModelMetadata();
builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();

builder.Services.AddSingleton<OAuthAuthorizationManager>();

var app = builder.Build();


app.UseServiceModel(bld =>
{
    bld.AddServiceEndpoint<Service, IService>(new BasicHttpBinding(BasicHttpSecurityMode.Transport), "/Service.svc");
    var mb = app.Services.GetRequiredService<ServiceMetadataBehavior>();   
    mb.HttpsGetEnabled = true;
});
app.Run();

然后是我的wcf.config:

    <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
      <bindings>
        <basicHttpBinding>
          <binding name="basicBinding" receiveTimeout="00:10:00">
            <security mode="Transport" />
          </binding>
        </basicHttpBinding>
      </bindings>
      <services>
        <service name="CoreWCFService.Service" behaviorConfiguration="Default">
          <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="basicBinding" contract="CoreWCFService.IService"  />       
        </service>
      </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" />
          <serviceAuthorization serviceAuthorizationManagerType="CoreWCFService.OAuthAuthorizationManager,CoreWCFService" />
          <dataContractSerializer maxItemsInObjectGraph="10000000" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    </system.serviceModel>
</configuration>

但是当我使用令牌调用服务时,授权管理器上没有任何反应,操作运行时只是忽略此服务行为。

有没有人可以帮我解决这个问题?

wcf corewcf
2个回答
0
投票

您可以参考Corewcf项目模板。有几点需要注意:

  1. 接口和实现需要分离,方便后续接口的维护和调用。

  2. 我们需要查看Program.cs中的UseServiceModel部分。


0
投票

这有效吗?我和原始海报有同样的问题,正在寻找该怎么做的答案。

我们从 .NET Framework 4.7.2 升级到 .NET6,现在我们的身份验证不起作用。

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