Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可靠的C#Web应用程序身份验证_C#_Asp.net_Security_Authentication - Fatal编程技术网

可靠的C#Web应用程序身份验证

可靠的C#Web应用程序身份验证,c#,asp.net,security,authentication,C#,Asp.net,Security,Authentication,因此,我现在已经构建了几个web应用程序,我不确定我的身份验证方法是否最安全 目前,我将用户名/密码组合与AD帐户进行比较,如果身份验证成功,它将创建一个包含用户id的会话字符串。然后,对于需要登录的每个页面,在页面加载时检查该会话字符串是否为空或有值。如果为空,则会将您重定向到登录页面,但如果不为空,则会加载页面 我的问题是,是否有比这更好的方法来处理身份验证?我目前构建它的方式很有效,但我很好奇是否有更好的方式来处理这个问题 为什么不使用内置的成员资格提供程序框架?您仍然可以进行身份验证,但

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

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


我的问题是,是否有比这更好的方法来处理身份验证?我目前构建它的方式很有效,但我很好奇是否有更好的方式来处理这个问题

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

关于怎么做

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


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

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

关于怎么做

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


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

我建议不要在会话中存储数据。您希望您的服务器是无状态的;如果将web应用部署到多个服务器(例如,在云环境中),或者当用户仍在站点上时会话数据过期,会话字符串会发生什么变化

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


这已经讨论过好几次了,所以我先让您参考。

我建议不要在会话中存储数据。您希望您的服务器是无状态的;如果将web应用部署到多个服务器(例如,在云环境中),或者当用户仍在站点上时会话数据过期,会话字符串会发生什么变化

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

这已经讨论过好几次了,所以我先让您参考。

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

通过这种方式,如果您愿意,您可以使用AD,用户将自动重定向到登录页面,身份将存储在用户的Cookie中,以便他们可以持久化其登录会话,这一切都将自动处理。此外,如果您以后想切换到使用OpenID或其他某种机制进行身份验证,则除了更新web.config中的URL以提供身份验证外,您不需要在web应用程序中进行任何更改

这还允许您进行单点登录,因此,如果以后您创建了其他web服务,并且需要从web应用程序调用该服务,您可以轻松地将用户的身份验证委托给web服务进行身份验证。

我认为“最佳”方法是使用WIF使用基于声明的身份验证

通过这种方式,如果您愿意,您可以使用AD,用户将自动重定向到登录页面,身份将存储在用户的Cookie中,以便他们可以持久化其登录会话,这一切都将自动处理。此外,如果您以后想切换到使用OpenID或其他某种机制进行身份验证,则除了更新web.config中的URL以提供身份验证外,您不需要在web应用程序中进行任何更改


这还允许您进行单点登录,因此,如果以后您创建了其他web服务,并且需要从web应用程序调用该服务,您可以轻松地将用户的身份验证委托给web服务进行身份验证。

这是一千次。安全很容易。良好的安全性是很难做到的。不要走捷径,也不要推出自己的解决方案。我同意Rick的观点,但对于OP的使用案例来说,这种说法可能有些过头了。显然,OP应该使用现有的框架(特别是Asp.Net成员资格,as),但这种说法可能有些过分。声明承认,如果使用集成的Windows身份验证,声明就没有那么有用,因为它提供的许多功能已经通过域控制器可用。声明比一般的ASP.Net成员身份更容易设置。这是它的一千倍。安全很容易。良好的安全性是很难做到的。不要走捷径,也不要推出自己的解决方案。我同意Rick的观点,但对于OP的使用案例来说,这种说法可能有些过头了。显然,OP应该使用现有的框架(特别是Asp.Net成员资格,as),但这种说法可能有些过分。声明承认,如果使用集成的Windows身份验证,声明就没有那么有用,因为它提供的许多功能已经通过域控制器可用。声明比一般ASP.Net成员更容易设置