【发布时间】:2012-03-01 21:05:57
【问题描述】:
我开发了一个 MVC 应用程序,它使用 ASP.NET 成员资格提供程序建立在表单身份验证之上。
同一服务器还包含一个 WCF 应用程序,该应用程序指向与 MVC 应用程序相同的数据库(包括所有 aspnet 表)。
我想检查用户在服务中属于哪些组。
如何将凭据从 MVC 应用程序传递到 WCF 应用程序?
【问题讨论】:
标签: .net asp.net-mvc wcf wcf-security
我开发了一个 MVC 应用程序,它使用 ASP.NET 成员资格提供程序建立在表单身份验证之上。
同一服务器还包含一个 WCF 应用程序,该应用程序指向与 MVC 应用程序相同的数据库(包括所有 aspnet 表)。
我想检查用户在服务中属于哪些组。
如何将凭据从 MVC 应用程序传递到 WCF 应用程序?
【问题讨论】:
标签: .net asp.net-mvc wcf wcf-security
你也可以
在 MVC 应用程序上开发任何类型的 API,以供 WCF 应用程序与之交互(这将允许您在未来将这两个东西部署到任何您想要的地方),
尝试让 WCF 服务使用 Membership 提供程序进行身份验证,并将 wcf 端的成员资格提供程序指向同一个 db。
看看这个
[谈到成员资格提供程序] Windows Communication Foundation (WCF) 开发人员可以利用这些功能来实现安全目的。当集成到 WCF 应用程序中时,用户必须向 WCF 客户端应用程序提供用户名/密码组合。要将数据传输到 WCF 服务,请使用支持用户名/密码凭据的绑定,例如 WSHttpBinding(在配置中为 wsHttpBinding 元素)并将客户端凭据类型设置为 UserName。在服务上,WCF 安全根据用户名和密码对用户进行身份验证,还分配了 ASP.NET 角色指定的角色。
That's the article containing configuration samples
希望我了解您的需求。
【讨论】:
由于您使用的是Membership Provider,因此您可以检查运行线程的Identity(经过身份验证的用户),该线程通过System.Threading.Thread.CurrentPrincipal.Identity 在WCF 应用程序中访问您的资源。
例子:
在您的 WCF 应用程序中,您可以使用一种方法来发现经过身份验证的用户,然后从那里查询您的数据库以获取该用户所属的组:
static List<UserGroup> GetUserGroups()
{
// Get the authenticated username
string username = System.Threading.Thread.CurrentPrincipal.Identity.Name;
// Get the user's groups from your data store and pack them up in a list
...
etc
}
【讨论】:
System.Threading.Thread.CurrentPrincipal.Identity 获得对用户的引用。 Name 为空白,IsAuthenticated 为假。请注意,MVC 应用程序和 WCF 应用程序是 IIS 中的两个独立的 .NET 应用程序(但它们共享同一个 AppPool)。