Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.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
Azure ACS、WIF 3.5、Asp.Net 3.5自定义成员资格提供程序,已通过身份验证_Azure_Wif_Custom Membershipprovider - Fatal编程技术网

Azure ACS、WIF 3.5、Asp.Net 3.5自定义成员资格提供程序,已通过身份验证

Azure ACS、WIF 3.5、Asp.Net 3.5自定义成员资格提供程序,已通过身份验证,azure,wif,custom-membershipprovider,Azure,Wif,Custom Membershipprovider,按照本指南中的步骤,我已经配置了一个可用的Azure ACS服务&通过Facebook进行身份验证,重定向回在我的开发服务器上运行的网站 认证成功后,Azure ACS将重定向回我的本地开发网站,并且IsAuthenticated标志为true,但是我希望仅当来自声明的电子邮件也存在于我的本地数据库中时,通过检查/调用自定义成员资格提供方,将IsAuthenticated标志设置为true。如果索赔中的电子邮件不存在,我想将客户端重定向到注册页面。注册和验证后,我希望将IsAuthenticat

按照本指南中的步骤,我已经配置了一个可用的Azure ACS服务&通过Facebook进行身份验证,重定向回在我的开发服务器上运行的网站

认证成功后,Azure ACS将重定向回我的本地开发网站,并且IsAuthenticated标志为true,但是我希望仅当来自声明的电子邮件也存在于我的本地数据库中时,通过检查/调用自定义成员资格提供方,将IsAuthenticated标志设置为true。如果索赔中的电子邮件不存在,我想将客户端重定向到注册页面。注册和验证后,我希望将IsAuthenticated标志设置为true


当前,一旦通过Facebook和AzureACS的身份验证,用户可以请求安全页面,如ViewAccountBalance.aspx,即使该帐户不存在,因为开箱即用的IsAuthenticated标志为true。有兴趣了解其他人的做法和最佳做法。

您需要明确区分身份验证和授权。由于用户通过Facebook登录,这意味着他已通过身份验证(你知道他是谁,他来自哪里)

现在,如果您想根据特定的条件限制应用程序的某些部分,那么您实际上是在谈论授权。您可以考虑将角色与简单的HTTPMODEL组合起来。示例:您的HttpModule可以验证用户正在浏览的页面。如果用户访问需要活动配置文件的页面,则可以使用以下代码:

public class RequiresProfileHttpModule : IHttpModule
{
    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        context.AuthorizeRequest += new EventHandler(OnAuthorize);
    }

    private void OnAuthorize(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
        if (app.Request.Url.ToString().Contains("bla") && !app.Context.User.IsInRole("UsersWithProfile"))
            app.Response.Redirect("http://myapp/register.aspx");
    }
}
您需要注意的唯一一件事是更新主体,以确保在用户填写其电子邮件地址时,该主体具有UsersWithProfile角色


这只是众多可能的解决方案之一。如果使用ASP.NET MVC,则可以使用全局ActionFilters获得相同的结果。或者,您也可以尝试使用iclaims主体(如果用户有配置文件,请添加声明)。

Sandrino是正确的。您可以使用基于角色的授权(或者更一般地说,基于声明的授权)。默认情况下,ACS只是将身份提供者发布的声明返回给依赖方。对于Facebook,它将返回电子邮件声明。但是,您可以配置ACS以创建其他规则。例如,您可以将特定用户映射到值为administrator的角色。然后ACS还会将此角色声明返回给依赖方。然后可以使用Sandrino的建议使用基于角色的授权。您还可以参考以了解更多信息。

在Global.asax的OnInit()中,我添加了:this.PostAcquireRequestState+=(s,e)=>SecurityHelper.PostAcquireRequestState();然后在SecurityHelper.PostAcquireRequestState中,我有逻辑检查一个页面是否由标准FormsAuth保护,类似于()我还通过Membership.GetUser进行查找,并检查帐户是否存在,否则我重定向到一个注册页面。