我有几个关于如何使用 MVC asp.net 进行身份验证/授权的问题。
我有一堆 WCF 服务,通过在每个请求上传递用户名和密码来验证/授权用户(我使用 HttpModule 进行验证,并在 WCF 中捕获 Authenticating 事件)。它使用该 HttpModule 中的 aspnet 成员资格来验证用户并设置主体,以便我可以在我的服务中发挥作用(这些服务共享给我们的各种客户,因此我需要保持其工作方式)。
现在我想创建一个能够调用这些服务的 MVC 项目,但我不想在 session 中保存用户名和密码并将其传递给每个请求。
如果有人可以帮助我,我有一个有一些差距的场景!
我打开 WCF 在 WCF 服务层上提供的 AuthenticationService。
在我的 MVC 项目中,我添加了表单例份验证,并使用 authorize 属性装饰我的方法,如果我未获得授权,这会将我重定向到登录页面。
在登录页面中,当用户提供他/她的用户名和密码时,我调用 WCF AuthenticationService 来登录我的用户。然后我从中检索身份验证 token 并将其存储在我的 session 中。
下次我想在我的服务层上调用 WCF 服务时,我会检索此 token 并将其添加到我的请求 header 中。
在服务端验证我的用户的 HttpModule 上,我检查它是否是一个有效的 token 或它是否是一个有效的用户名或密码(以方便其他人调用这些网络服务) .
如果是,它接受请求并返回正确的数据。
这看起来是解决这个问题的正确方法吗??
非常感谢任何帮助.. :/ 提前致谢! 尼尔
最佳答案
建议的解决方案听起来不错。在听起来很糟糕的每个请求中传递用户名/密码的想法。对此的唯一修改是不通过登录页面获取 token ,而是从未 protected WCF 方法之一获取 token 。
客户端流程将是:
- 调用unguarded方法,传递用户名和密码作为参数,获取token
- 使用 token 调用其他方法进行身份验证
如果您的客户端支持 http cookie,您甚至可以完全依赖表单例份验证 - 将表单 cookie 附加到登录请求并将 cookie 与其他请求一起传递。这样您甚至不需要额外的模块。
关于使用 WCF 身份验证服务的 C# MVC 身份验证.. 几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17815774/