Asp.net MVC azure广告组标识
我目前正在用ASP.NET MVC完成我的网站,并登录azure广告 对于本网站,某些页面只能由管理员访问。为此,我创建了一个名为Asp.net MVC azure广告组标识,asp.net,asp.net-mvc,azure,azure-active-directory,Asp.net,Asp.net Mvc,Azure,Azure Active Directory,我目前正在用ASP.NET MVC完成我的网站,并登录azure广告 对于本网站,某些页面只能由管理员访问。为此,我创建了一个名为testAdmins的新组,当我检查用户是否可以访问某个页面时,我使用以下方法: ClaimsPrincipal principal = User as ClaimsPrincipal; if (principal.Claims.Any(x => x.Type == "groups" && x.Value == "id of testAdmin
testAdmins
的新组,当我检查用户是否可以访问某个页面时,我使用以下方法:
ClaimsPrincipal principal = User as ClaimsPrincipal;
if (principal.Claims.Any(x => x.Type == "groups" && x.Value == "id of testAdmins")){ //code }
我的用户witch在这个组中,它可以正常工作
但是,当我用实际管理员组(admins
)的值更改testadmin
的id时,我将在部署站点时使用,而我不在其中,服务器在40秒内不会显示任何内容,然后我收到以下消息:
中发生类型为“System.Web.HttpException”的异常
System.Web.dll,但未在用户代码中处理
其他信息:无法连接到SQL Server数据库
有人能解释一下发生了什么事吗
提前谢谢
PS:我做了更多的测试。。。当我的用户在组中时,它的工作速度很快,但如果不是,则需要2分钟并显示错误消息。。。如果有人不知道问题出在哪里,是否有人有办法从Azure Active Directory的特殊组中的用户进行不同的访问?提供完整的stacktrace和相关源代码行(完整的stacktrace包括文件名和行号!)。您所面临的问题对于入职开发人员来说非常常见(入职到ASP.NET 4.0+) 您的项目基于ASP.NET 4.0(或更高版本)的默认项目模板,默认情况下,该模板使用“本地用户帐户”创建网站。此模板为用户身份验证/授权创建实体框架数据库上下文和本地模型。这还会在web.config中创建一些设置,以定义EF的连接字符串(或指示默认字符串) 在该模板之上,您添加了必需的Azure AD身份验证详细信息-通过右键单击菜单(配置Azure AD身份验证-在VS 2015中提供)或通过包含一系列NuGet软件包手动添加。因此,您(不知道)创建了由本地帐户指定的FBA(基于表单的身份验证)和由Azure AD身份验证指定的OpenID Connect的糟糕组合 SQL Server错误来自该FBA(或本地用户帐户设置)配置。而且没有简单的方法可以移除它 因为我看到您只是在玩弄和测试一些东西,所以我强烈建议您重新开始一个新项目,并在向导的第二步(在VS 2013和VS 2015中都可用)时要小心-单击“更改身份验证”并选择“无身份验证”:
在这个干净的项目上,您可以添加Azure AD身份验证,一切正常,您不会看到任何SQL Server错误(这取决于您如何配置Azure AD身份验证-一些Wizzard-即多租户之一也会创建EF上下文)。Omg真的吗?哦,你确定吗?因为如果我在小组里的话效果会很好。。。也许他只是看得太远了,因为
principal.Claims.Any(x=>x.Type==“groups”&&x.Value==“testAdmins的id”)
太大了?ClaimsPricial的Claims属性是一个集合属性,由OpenID Connect Owin中间件初始化。查询此属性时,无法访问任何数据库。它不能太大,导致超时。去查看关于ClaimsPrincipal及其索赔财产mrPixel的文档!你也可以做一些简单的反编译来检查ClaimsPrincipal类型,并亲眼看到没有对DB的调用。好的,谢谢你的帮助!