Windows認証を使用してユーザーを承認する基本的なIIS7でホストされるWCFサービスを構成しようとしています。basicHttpBindingwith<security mode="TransportCredentialOnly">
とSSLを使用してクレデンシャルをフローする方法を示す多くの例を見てきました。TransportCredentialOnlyを使用するようにサービスを構成する場合、IEでsvcファイルを表示しようとすると、次のエラーが発生します。
BasicHttpBindingをバインドしているエンドポイントのスキームhttpに一致するベースアドレスが見つかりませんでした。登録されているベースアドレススキームは[https]です。
IIS7でホストしています。SSLは有効な証明書で構成されています。Windows認証がオンになっています。匿名認証がオフになっています。アプリケーションプールは、ApplicationPoolIdentityで実行されているASP.Netv4.0です。
これが私のサービスの設定ファイルです:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
</roleManager>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="svcTest" >
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" httpsHelpPageEnabled="true" httpHelpPageEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpEndpointBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="WCF_Test.Service1" behaviorConfiguration="svcTest">
<endpoint name ="Service1Endpoint"
address="EndpointTest"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpEndpointBinding"
contract="WCF_Test.IService1">
</endpoint>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Transport
代わりに使用するようにバインディングを変更するとTransportCredentialOnly
、IEでサービスファイルを表示できます。次に、Webクライアントへのプロキシを作成し、クライアントからサービスのメソッドを呼び出し、次のコードを使用してサービスメソッドからユーザーを承認しようとします。
if(System.Web.Security.Roles.IsUserInRole(@"Admins"))
このコードは、サーバー上でIISを実行しているアカウント(IIS APPPOOL \ ASP.NET v4.0)のIDを使用し、WebページからWebサービスを呼び出すユーザーのIDを使用しないため、機能しません。
有効なSSL証明書を使用してIIS7を構成し、セキュリティモード= "TransportCredentialOnly"でbasicHttpBindingを使用するにはどうすればよいですか?
このコードを使用してWebサービスでユーザーを認証できるように、ユーザーのWindowsクレデンシャルクライアントをWebサービスにフローするにはどうすればよいですか?
[PrincipalPermission(SecurityAction.Demand、Role = "Admins")]
またはこのコード
if(System.Web.Security.Roles.IsUserInRole(@"Admins"))
どんな助けでも大歓迎です。
ありがとうございました