c# Web应用程序认证

本文关键字:认证 应用程序 Web | 更新日期: 2023-09-27 18:11:24

所以我现在已经建立了几个web应用程序,我不确定我的身份验证方法是否最安全。

我目前将用户名/密码组合与AD帐户进行比较,如果身份验证成功,它将创建包含用户id的会话字符串。然后,在需要您登录的每个页面加载页面时,检查会话字符串是否为空或有值。如果它是空的,它重定向到登录页面,但如果它不是空的,那么它加载页面。

我的问题是,如果有一个更好的方法来处理身份验证比这?我有它目前建立的工作方式,但我很好奇,看看是否有一个更好的方法来处理这个。

c# Web应用程序认证

我建议不要在Session中存储数据。你希望你的服务器是无状态的;如果您将web应用程序部署到多个服务器(例如,在云环境中),或者如果您的会话数据过期,而用户仍在您的网站上,会发生什么?

处理身份验证令牌的更好方法是将其存储在每个请求发送的cookie中。

为什么不使用内置的成员提供程序框架呢?您仍然可以进行身份验证,但是使用AD作为您的会员资格提供者?然后,让它返回一个cookie,每次你执行一个操作或调用你的API时,它都会被发布。

这里有一个很好的教程。

我在一些企业移动应用程序上使用类似的方法,我针对AD对用户进行身份验证,然后Web API自动检查身份验证cookie。很简单。

当然,如果您需要的只是web应用程序,服务器而不是浏览器,那么更简单的选择是Windows身份验证(Kerberos/NTLM),这样您就不必担心管理身份验证提供程序了。

我认为"最好"的方法是使用基于声明的身份验证,使用WIF。

http://en.wikipedia.org/wiki/Windows_Identity_Foundation

解释"基于声明的认证";给一个5岁的孩子

如果你想,你可以使用AD,用户将自动重定向到登录页面,身份将存储在用户的cookie中,这样他们就可以坚持他们的登录会话,这一切都将自动处理。此外,如果你以后想要切换到使用OpenID或其他机制进行身份验证,那么你不需要在你的web应用程序中更改太多,除了更新web中的URL。配置您信任的服务器以提供身份验证。

这也允许你做单点登录,所以如果以后你有一些其他的web服务,你需要从web应用程序调用该服务,你可以很容易地委托用户的身份验证到web服务。