Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net MVC azure广告组标识_Asp.net_Asp.net Mvc_Azure_Azure Active Directory - Fatal编程技术网

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

我目前正在用ASP.NET MVC完成我的网站,并登录azure广告

对于本网站,某些页面只能由管理员访问。为此,我创建了一个名为
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的调用。好的,谢谢你的帮助!