私はWCFを初めて使用し、この問題で本当に迷っています...クライアントから提供されたユーザー名とパスワードを使用して、WCFサービスが着信要求を認証するようにします。
Web.Config の関連部分は次のようになります。
<endpoint name="wsBinding"
address=""
binding="wsHttpBinding"
contract="ServiceLib.IBooking"
bindingConfiguration="myWSSettings"
/>
と...
<bindings>
<wsHttpBinding>
<binding name="myWSSettings">
<security mode="Transport">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType= "ServiceLib.MyCustomUserNameValidator, ServiceLib" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
MyCustomUserNameValidator は、ユーザー名がパスワードと等しくない場合に単に例外をスローする一時的なバリデーターです。
クライアント プログラム (コンソール アプリ) はこれを行っています。
BookingClient client = new BookingClient("wsBinding");
Passenger passenger = new Passenger();
// ../
client.ClientCredentials.UserName.UserName = "SomeUserName";
client.ClientCredentials.UserName.Password = "WrongPassword";
// ...
// ...
// NOTE: Following should throw My SecurityException Since username and
// Password are not equal
bool confirmed = client.IsTicketConfirmed(passenger);
これは私が得るエラーです:
HTTP 要求は、クライアント認証方式 'Negotiate' では許可されていません。サーバーから受信した認証ヘッダーは「Negotiate,NTLM,Basic」でした
本当に助けていただければ幸いです!私はこれを理解しようと多くの時間を費やしましたが、無駄でした.
ありがとうサンディープ
ノート: - - - -
- GoDaddy を使用して WCF サービスをホストしています。部分信頼のため、セキュリティ モード = "メッセージ" は使用できません。
- SSL 証明書が正しくインストールされている。