2012-02-17 109 views
3

编辑:我已经决定去WCF数据服务,而不是MVC3WCF数据服务认证

现在,我已经决定去WCF数据服务 - 我需要一种方法来验证和授权用户。

曾看过设置SQLMembership DB,但正在努力实际验证用户。我的客户不会是.NET应用程序 - 很可能是一个iPhone/Android应用程序,它将调用RESTFul WCF数据服务来获取数据...

回答

2

认证

WCF数据服务允许多种身份验证选项,如MSDN上描述:保护WCF数据服务。从可用的方法来看,Windows身份验证是最安全的,它使用NTLMKerberos机制。由于跨平台可用性的限制,可以使用的最适合和安全的身份验证方法是NTLM,因为它几乎可以在所有当前平台上使用:Android(从4.0版“冰淇淋三明治”),iOS, Linux,UNIX,Windows。

为托管在IIS上的OData服务设置Windows身份验证意味着禁用匿名访问并启用集成Windows身份验证。更详细的指南可以在Odata and Windows Authentication找到。

为了更好地控制允许访问服务的用户,可以直接从配置文件(即web.config)向用户角色/组以及特定用户授予或拒绝访问权限, 。下面描述允许特定用户访问的语法。为了获得最大的安全性,建议拒绝对所有用户/组的访问,并根据需要明确允许访问。 (即允许用户域\用户接入优先于拒绝为所有用户)

<authorization> 
     <allow users="DOMAIN\user"/> 
     <-- Deny access to every other authenticated or anonymous user 
     <deny users="*" /> 
     <deny users="?" /> 
    </authorization> 

在授权标签之间的规则采取顺序如果授权标签并没有明确的配置文件中定义,那么IIS将对所有已识别的连接用户(在Active Directory或本地计算机中)进行身份验证并允许访问。

在跨域环境中设置Windows身份验证是可行的,但需要两种:域之间建立

  • 信任(让IIS可以验证外部用户),或
  • 的相同的用户名/密码组合在两个域上都存在 或
  • 外部域中的客户端使用对服务器域有效的凭据 进行身份验证。

这些情况的可用选项在this博客文章中有更详细的描述。

模拟

为了能够登录到数据库和检索利用发送到WCF数据服务的Windows帐户凭据所需的数据,该服务需要模拟用户。这可在无论是在代码来完成,或在配置

  • 在配置文件(即web.config中),以下设置
    必须进行:
identity impersonate="true" 
  • 如果不希望整个服务在连接用户的 证书下运行, sonation可以设置 编程,需要的地方,以下面的方式:

    lUser = TryCast(HttpContext.Current.User.Identity,的WindowsIdentity)

    lUserContext = WindowsIdentity.Impersonate(lUser.Token)

+0

感谢您的答复 - 我不是在寻找Windows身份验证的用户将使用SQLMembership数据库 – Steve 2012-02-21 20:51:46

+0

感谢后进行存储,它是从尝试IOS认证时一样吗?我正在从一个框架调用ipad和iphone – 2012-08-22 05:43:57

+0

的WCF服务。是的,iOS上也支持NTLM。 – 2012-08-22 06:38:38

2

我建议使用ServiceStack.net和MVC 3. ServiceStack一个与MVC 3搭配得很好的Web服务框架,包括一个NuGet包来设置所有东西,并使用JSON本地工作。关于它的最好的事情是没有配置(与WCF相反)以及简单而强大的代码优先方法。它也非常快。下载请参阅servicestack.net,我的tutorial开始使用它。在我的教程中,您可以使用自己的DB代码替换存储库中的Tridion代码以存储数据。