为Azure webapp上托管的SOAP WCF添加简单的安全性
我在Azure应用程序上托管了一个SOAP WCF。 此服务仅由服务器使用,不包含UI。 我只需要一个服务帐户来授权我的WCF。 我不能使用oauth,因为它是SOAP。 我已经阅读了一些关于ACS的内容,但在我的案例中似乎有些过分,因为我只想使用一个帐户来保护我的WCF。 我的想法是,我将利用Azure AD在那里建立一个服务帐户并使用它来保护服务。
这甚至可以在Web应用程序上使用,还是需要将其托管在Web角色上? 在任何情况下,我如何根据我的前提在我的WCF上实现简单的安全性?
详细的答案示例
经过一般性讨论后,这里有一个建立传输安全性+简单密码的详细示例(在IIS中,内部或Azure我刚测试过)
这很简单 。
– 没有基于身份的角色,没有声明或程序控制。
– 身份是硬编码的。
– 不使用更强大的消息安全性(中间的人)。
– 传输安全性是最小的,因为基本身份validation没有得到证实。
该安全方案实施起来很短
1.创建具有传输安全性的Web服务
2.声明查找Basic-Auth的模块
3.模块的实施:
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配置客户端以传递基本身份validation
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 Provider或自定义基础)
- 有一些角色
- 对以下方法设置一些声明性权限:
[PrincipalPermission(SecurityAction.Demand, Role = "Manager")]
完整的解决方案: http : //1drv.ms/1Q5j9w0
问候
对于身份validation ,您可以使用:
- 传递{login,password}的用户名认证。
- 用于标识客户端的X509机制(需要在客户端上部署证书)
- 自定义validation
对于Transfer安全性 ,您可以使用:
- 使用服务器端安装的证书进行消息安全
- 传输安全(HTTPS)
但强烈建议您使用一些消息安全性而不是传输安全性。 传输(Https / SSL)可以在中间受到攻击(控制路由器)。
消息安全性的缺点是您必须在服务器上安装证书 :
在Web角色中设置证书要容易得多,您可以在Role.OnStart
方法中进行设置
- 如果您热衷于Web应用程序,请使用以下链接来提供带有用户名的传输安全性
(您应该跳过使用ASP.NET MemberShip / Role提供程序的部分,因为您需要单个用户并且数据库是额外的工作):
https://msdn.microsoft.com/en-us/library/ff649647.aspx
- 如果您热衷于邮件安全性,则应该转到Web角色并使用证书来确保邮件安全。
自定义身份validation链接与邮件安全性:
http://www.codeproject.com/Articles/33872/Custom-Authorization-in-WCF
问候