我对Windows Azure云中运行的Asp.net mvc4项目了。 但到目前为止,还没有任何用户管理的事情。 任何人都可以登录(我有一个Windows Live上的单点登录)。 但现在我需要做的最简单的基于角色的认证。
1.I要注册的用户角色(管理员,用户,内容管理器)/可手动完成。 2.我需要登录时进行身份验证基于角色的用户。
任何一个可以给我一个提示,或者链接到一个清晰的教程或建议我的任何想法?
我对Windows Azure云中运行的Asp.net mvc4项目了。 但到目前为止,还没有任何用户管理的事情。 任何人都可以登录(我有一个Windows Live上的单点登录)。 但现在我需要做的最简单的基于角色的认证。
1.I要注册的用户角色(管理员,用户,内容管理器)/可手动完成。 2.我需要登录时进行身份验证基于角色的用户。
任何一个可以给我一个提示,或者链接到一个清晰的教程或建议我的任何想法?
最简单的其实是添加在由ACS颁发的令牌“角色”索赔。 既然你说你是手工做这行现在好了,那么你就应该使用ACS门户网站来创建这些规则。
在您的应用程序,你会做平常的事情,像装饰用的“授权”属性,包括角色的行动:
[Authorize(Roles="Administrator")]
public ActionResult Index()
{
var b = User.IsInRole("Manager");
...
}
只要你使用“角色”声明类型,一切正常。 (这也可以定制的,但它的作品开箱这样的)。
你将有唯一的挑战是由于LiveID的。 LiveID的给你只是一个唯一的标识符。 你需要映射与知用户(例如电子邮件或名称)的标识符的方式。 这通常需要一个两个步骤过程。 你先进行身份验证,并获得唯一的ID,然后你问用户的信息,并对其进行验证(通过发送例如电子邮件)。
使用任何其他身份提供的,你没有这个问题,因为所有的人给你的电子邮件和名称。
撰写上述规则是一样容易:
如果您有更多的用户数量或再大一些规则的门户网站往往不再实用,你需要其他的东西(例如使用API从您的应用程序,使用脚本,使用工具,如auth10等)
我解决它为我的项目的方式是增加一个ClaimsAuthenticationManager
并添加用户的角色的身份出现。
namespace Claims
{
public class RoleClaimsAuthenticationManager : ClaimsAuthenticationManager
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated)
{
var identity = (ClaimsIdentity)incomingPrincipal.Identity;
var roles = getRolesForIdentity(identity); //Get the roles for your identity here
foreach (var r in roles)
{
identity.AddClaim(new Claim(ClaimTypes.Role, r.Name));
}
}
return base.Authenticate(resourceName, incomingPrincipal);
}
}
然后我把它挂在了配置system.identityModel -> identityConfiguration
节
<claimsAuthenticationManager type="Claims.RoleClaimsAuthenticationManager, Claims" />
正如你可能已经注意到ACS负责验证,而不是授权的,你需要处理的是自己。
最容易做的事情是在你的应用程序的每个新用户连接的时间来创建一个“个人资料”。 当一个特定的用户创建配置文件,您需要与配置文件一起存储用户的身份提供商和名称。 存储这些信息可以让你连接他下一次获取配置文件是用户(您会得到从权利要求这个信息,但是这取决于你如何配置ACS)。
对于一个完全工作的例子,你应该看一看的源BlobShare应用程序(使用身份验证和授权)。
比ACS以外的选项是memebership服务。
入门会员
随着会员服务,您有身份验证和授权。 成员有角色,你甚至可以在web.config中使用的角色。
ACS是个不错的选择。 我只是提出另一种选择。