使用WCF身份验证服务进行C#MVC身份验证..几个问题

时间:2013-07-23 16:26:00

标签: c# asp.net-mvc wcf authentication asp.net-membership

关于如何使用MVC asp.net进行身份验证/授权,我有几个问题。

我有一堆WCF服务通过在每个请求上传递用户名和密码来验证/授权用户(我使用HttpModule进行验证,并在WCF中捕获Authenticating事件)。它在HttpModule中使用aspnet成员资格来验证用户并设置Principal,这样我就可以在我的服务上拥有角色(这些服务与我们的各个客户共享,因此我需要保持其工作原理)。

现在我想创建一个能够调用这些服务的MVC项目,但我不想在会话中保存用户名和密码并将其传递给每个请求。

如果有人能帮助我,我的情况会有一些差距!

  1. 我打开WCF在WCF服务层上提供的AuthenticationService。

  2. 在我的MVC项目中,我添加了表单身份验证,并使用authorize属性修饰我的方法,如果我没有被授权,它会将我重定向到登录页面。

  3. 在登录页面中,当用户提供他/她的用户名和密码时,我会调用WCF AuthenticationService来登录我的用户。然后我从中检索身份验证令牌并将其存储在我的会话中。

  4. 下次我要在服务层调用WCF服务时,我会检索此令牌并将其添加到我的请求标题中。

  5. 在验证我的用户服务端的HttpModule上,我检查它是否是有效的令牌 OR ,如果它是有效的用户名或密码(以方便其他人调用这些Web服务)

  6. 如果是,则接受请求并返回正确的数据..

  7. 这看起来是解决这个问题的正确方法吗?

    非常感谢任何帮助..:/ 提前致谢! 尼尔

1 个答案:

答案 0 :(得分:0)

建议的解决方案听起来不错。这个想法是在每个听起来不好的请求中传递用户名/密码。对此的唯一修改是不通过登录页面获取令牌,而是通过一种无人看守的WCF方法获取令牌。

客户流程将是:

  1. 调用无保护的方法,将用户名和密码作为参数传递,获取令牌
  2. 使用令牌进行身份验证调用其他方法
  3. 如果您的客户支持http cookie,您甚至可以完全依赖表单身份验证 - 将表单cookie附加到登录请求,并将cookie与其他请求一起传递。这样你甚至不需要额外的模块。

相关问题