我正在开发一个ASP.NET网站。我打算使用Forms身份验证以保证身份验证/授权,但我在授权方面遇到两个问题:
我知道如何在Web配置中设置允许经过身份验证的用户访问网页(比如myPage.aspx)。但我不知道如何定义UserA能够访问myPage以检索他的信息,而不是UserB的信息。 我在考虑在用户进行身份验证时生成令牌,因此我可以检查此令牌属于谁,并验证此信息是否可供他使用。 您如何看待这种方法?表单身份验证是否会生成这样的令牌? (在我的研究中,我找不到任何关于它的提及)。如果没有,我可以调整表单身份验证机制以生成或者我是否需要自己编写所有内容?
我想访问webservices,这些只应在用户登录时返回信息。出于这个原因,我想使用上面解释的相同的标记。你怎么看待这件事?这是一个好方法吗?
我问这个是因为我没有设计认证/授权机制的经验,任何帮助/提示都会受到赞赏。
答案 0 :(得分:1)
关于问题1,在ASP.Net Web表单应用程序中进行表单身份验证后,用户的身份将在Page.User.Identity属性中公开为FormsIdentity对象。此对象具有Name属性,该属性包含用户用于登录站点的用户名。您可以使用此值来限制用户可以访问的内容。例如,假设您的数据库中有一个表,其中包含以下字段的用户信息:
userId int
userName varchar(25)
...more fields containing user information...
您可以限制用户仅访问此表中其中userName等于Page.User.Identity.Name属性的行中的信息,如果您使用的是直接ADO.Net或通过查询到ORM,则可以直接访问-mapped(即nHibernate或EF)域对象。
关于问题二,Page.User.Identity公开的FormsIdentity对象具有布尔“IsAuthenticated”属性。您可以使用此选项来限制对Web服务的访问,如下所示:
if(Page.User.Identity.IsAuthenticated)
{
//Call your web service in a secure manner
}