【问题标题】:C# MVC Authentication with the WCF Authentication Service.. a few questionsC# MVC Authentication with the WCF Authentication Service.. 几个问题
【发布时间】:2013-07-23 16:25:59
【问题描述】:

关于如何使用 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 上,我检查它是否是一个有效的令牌它是否是一个有效的用户名或密码(以方便其他人调用这些 Web 服务) .

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

这似乎是处理这个问题的正确方法吗??

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

【问题讨论】:

  • 这真的很奇怪。将用户名/密码传递给每个请求很麻烦,并且您失去了灵活性。您是否正在尝试通过您的方法来满足任何重要要求,或者您只是不知道如何以其他方式做到这一点?
  • 我们提供的一些服务适用于基于 SAP 的系统,我认为这些系统无法处理基于令牌的身份验证。这就是我选择这个的原因。不过,我不认为这是一个坏主意吗?所有基于 REST 的服务都不是无状态的吗?
  • 如果这是一个糟糕的解决方案,您能提供另一种解决方案吗?如果没有太多 WCF 知识,这是相当困难的..

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


【解决方案1】:

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

客户流程将是:

  1. 调用unguarded方法,传入用户名密码作为参数,获取token
  2. 使用令牌调用其他方法进行身份验证

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

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2015-12-31
    • 2019-10-30
    • 1970-01-01
    • 2014-07-04
    相关资源
    最近更新 更多