詳細的解答例如
一般性討論之後,這裏是建立傳輸安全的詳細示例+簡單的密碼(在IIS中,在我剛剛測試過的場所或Azure上)
這是非常簡單的。
- 沒有角色,沒有基於身份的聲明或程序控制。
- 身份是硬編碼的。
- 沒有使用更強大的消息安全性(中間人)。
- 傳輸安全性是最小的,因爲基本身份驗證沒有被證實。
該安全方案是短落實
1.傳輸安全性創建Web服務的
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicBindingConfiguration">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="HelloServiceLibrary.HelloService" behaviorConfiguration="customIdentificationBehavior">
<endpoint address=""
binding="basicHttpBinding"
contract ="HelloServiceLibrary.IHelloService"
name="basicEndpoint"
bindingConfiguration="BasicBindingConfiguration">
</endpoint>
2.模塊的聲明找到基本認證
<system.webServer>
<modules>
<add name="BasicAuthenticationModule"
type="Security.UserNameModuleAuthenticator,App_Code/Security" />
</modules>
</system.webServer>
3.模塊的實現E:
public class UserNameModuleAuthenticator : IHttpModule{
...
public void OnAuthenticateRequest(object source, EventArgs eventArgs){
HttpApplication app = (HttpApplication)source;
string authStr = app.Request.Headers["Authorization"];
string username = ...; // from header
string password = ...; // from header
if (username == "gooduser" && password == "password")
{
app.Context.User = new GenericPrincipal(new GenericIdentity(username, "Custom Provider"), null);
}
else
{
DenyAccess(app);
return;
}
4配置客戶端傳遞基本認證
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicEndpoint">
<security mode="Transport" >
<transport clientCredentialType="Basic"
proxyCredentialType="None"
realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost/TransportUsernameService/HelloService.svc"
binding="basicHttpBinding" bindingConfiguration="basicEndpoint"
contract="SecureServiceReference.IHelloService" name="basicEndpoint" />
</client>
</system.serviceModel>
5.在客戶端通**憑據服務器**
HelloServiceClient client = new HelloServiceClient("basicEndpoint",
new EndpointAddress("https://testsecurewebservice.azurewebsites.net/HelloService.svc"));
client.ClientCredentials.UserName.UserName = userName;
client.ClientCredentials.UserName.Password = password;
String msg = client.SayHello(userName);
可能擴展程序
- 創建/(使用ASP.Net提供或定製基)
- 有一定的作用
- 把一些聲明權限對等的方法管理部分用戶在這裏
[PrincipalPermission(SecurityAction.Demand, Role = "Manager")]
完整的解決方案:http://1drv.ms/1Q5j9w0
Regards
是的,這很有可能是因爲WCF服務涉及很多安全問題。他們可以在Azure網站中進行託管(限制在端口80/443)。通過安全,你究竟意味着什麼:識別客戶端,啼哭消息,識別服務器......? –
我想使用某種類型的wcf安全性,以便WCF不會完全暴露給任何人使用。那麼,如果它的信任/持票人/信任或無關緊要。基本上我想知道哪些WS-安全方法應該用於我的用例,以及我應該如何驗證以及如何配置它。 – Aleve940
您可以使用SWT和ACS作爲Auth提供程序創建一個非常簡單的ACS設置。你爲什麼覺得ACS過度殺傷? –