Windows Azure WCF安全性
我已经在云端部署了一个wcf服务。有人能告诉我如何在azure中确保端点的最佳实践吗Windows Azure WCF安全性,azure,Azure,我已经在云端部署了一个wcf服务。有人能告诉我如何在azure中确保端点的最佳实践吗 谢谢。在我看来,最简单的方法是使用AppFabric访问控制服务ACS生成一个安全的Web令牌SWT,通过授权HTTP头传递给WCF服务。在服务方法中,您可以从报头读取并验证SWT 这非常简单,特别是当您动态创建代理而不是使用服务引用时 以下是我从ACS获得SWT的方式: private static string GetToken(string serviceNamespace, string issuerK
谢谢。在我看来,最简单的方法是使用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;
}
正如在ACS v1中所提到的,issuerKey现在是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();
在服务端,从报头提取令牌并对其进行验证。如果这看起来像是您想要采取的方法,我可以找到相应的代码
Alik Levin尝试将其作为一个良好的起点。在我看来,最简单的方法是使用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;
}
正如在ACS v1中所提到的,issuerKey现在是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();
在服务端,从报头提取令牌并对其进行验证。如果这看起来像是您想要采取的方法,我可以找到相应的代码
Alik Levin尝试将其作为一个良好的起点。一种典型的、广泛可互操作的方法是通过SSL连接使用HTTP基本身份验证。在Azure中运行此功能的方法与在传统Windows服务器上实现此功能的方法非常相似 您可以实现一个IIS Http模块,并提供自己的基本身份验证模块的实现—这可以按照您的意愿工作,但是调用ASP.NET成员身份调用ValidateUser将是一种常见的方法。可在SQL Azure中托管的存储 然后,通过实现IAuthorizationPolicy并将其添加到AuthorizationPolicys WCF配置元素,可以将其呈现给WCF Patterns and Practices团队对此进行了演练,并在
. 您可以忽略简短的Windows窗体讨论—作为web服务,它们对客户端的选择是不相关的。一种典型的、广泛可互操作的方法是通过SSL连接使用HTTP基本身份验证。在Azure中运行此功能的方法与在传统Windows服务器上实现此功能的方法非常相似 您可以实现一个IIS Http模块,并提供自己的基本身份验证模块的实现—这可以按照您的意愿工作,但是调用ASP.NET成员身份调用ValidateUser将是一种常见的方法。可在SQL Azure中托管的存储 然后,通过实现IAuthorizationPolicy并将其添加到AuthorizationPolicys WCF配置元素,可以将其呈现给WCF Patterns and Practices团队对此进行了演练,并在
. 您可以忽略简短的Windows窗体讨论—作为web服务,它们对客户端的选择是不相关的。这对Java客户端有效吗?他们能很容易地引用sts吗?只是好奇。谢谢。是的,这种方法对于Java客户机应该很好。只需遵循与上面的GetToken方法相同的方法。这对Java客户机有效吗?他们能很容易地引用sts吗?只是好奇。谢谢。是的,这种方法对于Java客户机应该很好。只需遵循与上面的GetToken方法相同的方法。