Windows Azure WCF安全性

Windows Azure WCF安全性,azure,Azure,我已经在云端部署了一个wcf服务。有人能告诉我如何在azure中确保端点的最佳实践吗 谢谢。在我看来,最简单的方法是使用AppFabric访问控制服务ACS生成一个安全的Web令牌SWT,通过授权HTTP头传递给WCF服务。在服务方法中,您可以从报头读取并验证SWT 这非常简单,特别是当您动态创建代理而不是使用服务引用时 以下是我从ACS获得SWT的方式: private static string GetToken(string serviceNamespace, string issuerK

我已经在云端部署了一个wcf服务。有人能告诉我如何在azure中确保端点的最佳实践吗


谢谢。

在我看来,最简单的方法是使用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方法相同的方法。