定義在象在web.config的結合:
<basicHttpBinding>
<binding name="BasicAuthBinding">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
然後定義一個服務行爲,如:
<behavior name="Namespace.TestBehaviour">
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="Namespace.ServiceSecurity.UserAuthenticator, Namespace" />
</serviceCredentials>
<serviceAuthorization>
<authorizationPolicies>
<add policyType="Namespace.ServiceSecurity.MyAuthorizationPolicy, Namespace" />
</authorizationPolicies>
</serviceAuthorization>
</behavior>
然後提供自定義的認證和授權類如下:
public class MyAuthorizationPolicy: IAuthorizationPolicy
{
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
IList<IIdentity> identities = (IList<IIdentity>) evaluationContext.Properties["Identities"];
foreach (IIdentity identity in identities)
{
if (identity.IsAuthenticated &&
identity.AuthenticationType == "UserAuthenticator")
{
evaluationContext.Properties["Principal"] = identity.Name;
return true;
}
}
if (!evaluationContext.Properties.ContainsKey("Principal"))
{
evaluationContext.Properties["Principal"] = "";
}
return false;
}
public ClaimSet Issuer
{
get { throw new NotImplementedException(); }
}
}
驗證如下:
public class UserAuthenticator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
//authenticate me however you want
//then set whatever you want
}
}
如果您需要進一步的安全性,改變basicHttpBinding的到的wsHttpBinding和使用證書
編輯:差點忘了,使用所定義的服務行爲,並在web.config中的服務接口定義綁定。
>謝謝!我現在已經實現了這一點,但在瀏覽服務時得到以下異常:BasicHttp綁定要求BasicHttpBinding.Security.Message.ClientCredentialType與安全消息的BasicHttpMessageCredentialType.Certificate憑證類型相同。爲UserName憑證選擇Transport或TransportWithMessageCredential安全性。 – Banshee
>我已經嘗試設置綁定到這一點:<綁定名稱=「BasicAuthIntegration」> <安全模式=「TransportCredentialOnly」> <運輸clientCredentialType =「基本」> ,這是將得到的服務會但是當試圖從測試客戶端調用服務時(使用ClientCredentials.UserName.UserName和ClientCredentials.UserName.Password),我將得到以下異常(在客戶端中):HTTP請求未經客戶端身份驗證方案「Basic」的授權。從服務器收到的驗證頭是'Basic realm ='localhost''。 – Banshee