2013-07-23 36 views
4

我有几个问题关于如何使用MVC asp.net进行身份验证/授权。C#MVC身份验证与WCF身份验证服务..几个问题

我有一堆的WCF服务,通过在每个请求上传递用户名和密码(我使用HttpModule进行验证,并在WCF中捕获身份验证事件)来验证/授权用户。它在该HttpModule中使用aspnet成员资格来验证用户,并设置Principal,以便我可以在我的服务上拥有角色(这些服务共享给我们的各种客户端,所以我需要保持这种工作方式)。

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

我有一个场景,如果有人可以请帮我!

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

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

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

  4. 下一次我想在我的服务层上调用WCF服务时,我检索该令牌并将其添加到我的请求的标头中。

  5. 在那个验证我在服务端用户的HTTP模块,我检查其有效令牌OR如果一个有效的用户名和密码(以方便别人调用这些Web服务)。

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

这个问题似乎像处理这个正确的方式?

任何帮助非常感谢。:/ 在此先感谢! Neil

+0

这真是奇怪的做法。将用户名/密码传递给每一个请求都很麻烦,而且你松了一些灵活性。您是否有任何重要的要求试图用您的方法来实现,或者您只是不知道如何以其他方式做到这一点? –

+0

我们提供的一些服务是基于SAP的系统,我不认为它们能够处理基于令牌的身份验证。这就是我这样做的原因。我不觉得这是一个坏主意吗?所有基于REST的服务都不是无状态的吗? –

+0

如果这是一个糟糕的问题,你能否提供另一种解决方案?没有太多的WCF知识是很难的。 –

回答

0

建议的解决方案听起来不错。传递用户名/密码与每一个听起来糟糕的请求都是想法。对此的唯一修改是不通过登录页面获取令牌,而是从无保留的WCF方法获取令牌。

客户端流量会那么:

  1. 电话无人防守的方法,通过用户名和密码作为参数,得到使用令牌,令牌
  2. 调用其他方法来验证

如果您的客户端支持http cookie,您甚至可以仅依靠表单身份验证 - 将表单cookie附加到登录请求中,并将cookie与其他请求一起传递。这样你甚至不需要额外的模块。