4

关于如何使用 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. 如果是,它接受请求并返回正确的数据。

这似乎是解决这个问题的正确方法吗?

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

4

1 回答 1

0

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

客户流程将是:

  1. 调用无人看守的方法,将用户名和密码作为参数传递,获取令牌
  2. 使用令牌调用其他方法进行身份验证

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

于 2013-07-23T18:03:44.307 回答