1
A
回答
2
在我看来,最简单的方法是使用AppFabric访问控制服务(ACS)生成一个安全Web令牌(SWT),通过授权HTTP头传递给WCF服务。在服务方法中,您可以从头文件中读取并验证SWT。
这很简单,特别是如果您动态创建代理而不是使用服务引用。
这是我从ACS获得SWT:
private static string GetToken(string serviceNamespace, string issuerKey, string appliesto)
{
WebClient client = new WebClient();
client.BaseAddress = String.Format("https://{0}.accesscontrol.windows.net", serviceNamespace);
client.UseDefaultCredentials = true;
NameValueCollection values = new NameValueCollection();
values.Add("wrap_name", serviceNamespace);
values.Add("wrap_password", issuerKey);
values.Add("wrap_scope", appliesto);
byte[] responseBytes = client.UploadValues("WRAPv0.9", "POST", values);
string response = System.Text.Encoding.UTF8.GetString(responseBytes);
string token = response
.Split('&')
.Single(value => value.StartsWith("wrap_access_token=", StringComparison.OrdinalIgnoreCase))
.Split('=')[1];
return token;
}
issuerKey
,因为它是在ACS V1提到现在从服务标识在ACS V2密码。
拨打服务:
string accessToken = GetToken(serviceNamespace, issuerKey, appliesto);
string authHeaderValue = string.Format("WRAP access_token=\"{0}\"", HttpUtility.UrlDecode(accessToken));
// TInterface is the service interface
// endpointName refers to the endpoint in web.config
ChannelFactory channelFactory = new ChannelFactory<TInterface>(endpointName);
TInterface proxy = channelFactory.CreateChannel();
OperationContextScope scope = new OperationContextScope(proxy as IContextChannel);
WebOperationContext.Current.OutgoingRequest.Headers.Add(HttpRequestHeader.Authorization, authHeaderValue);
// Call your service
proxy.DoSomething();
在服务端,您提取头中的令牌和验证。如果这看起来像你想采取的方法,我可以找出代码。
尝试this blog post作者:Alik Levin是一个很好的起点。
2
一个典型的,广泛互操作的方法是通过SSL连接使用HTTP基本认证。在Azure中运行此方法的方法与在传统Windows服务器上实现此方法非常相似。
您可以实现一个IIS Http模块并提供您自己的BasicAuthenticationModule实现 - 不过您可以使用它,但调用ASP.NET Membership(对ValidateUser的调用)将是一种常用方法。这个商店可以托管在SQL Azure中。
然后,您可以通过实现IAuthorizationPolicy并将其添加到您的authorizationPolicies WCF配置元素中,将其表面显示为WCF。
模式和实践团队对此进行了演练,完成代码为 http://msdn.microsoft.com/en-us/library/ff649647.aspx。您可以忽略简短的Windows Forms讨论 - 作为Web服务,他们选择的客户端是无关紧要的。
相关问题
- 1. Windows Azure:安全问题
- 2. wcf windows集成安全
- 3. Azure上的安全WCF服务
- 4. 集成安全Windows Azure虚拟机
- 5. WCF客户端安全默认为Windows
- 6. WCF netTcpBinding Windows安全加密和签名
- 7. Windows服务中的WCF安全
- 8. WCF安全使用Windows身份验证
- 9. WCF NetTcpBinding安全
- 10. WCF消息安全
- 11. WCF安全认证
- 12. WCF安全绑定问题
- 13. WCF安全传输安全问题
- 14. WCF安全跨域
- 15. WCF 4.0安全
- 16. mvc wcf安全
- 17. WCF安全错误
- 18. WCF安全建议
- 19. WCF安全问题
- 20. WCF安全错误
- 21. Windows Azure上的WCF会话
- 22. WCF安全失败
- 23. WCF安全协商例外
- 24. WCF wsHttpBinding安全错误
- 25. WCF REST安全模拟
- 26. WCF安全与域组
- 27. WCF传输安全
- 28. WCF安全问题
- 29. WCF Web API安全
- 30. 安全例外WCF
这是否适用于Java客户端?他们会很容易*能够引用sts吗?只是好奇。谢谢。 – dana
是的,这种方法对于Java客户端来说应该很好。只需按照与上面的GetToken方法相同的方法。 –