2016-04-26 41 views
-1

我目前正在用ASP.NET Azure AD登录完成我的ASP.NET MVC网站。Asp.net MVC azure广告组标识

对于本网站,某些页面只能由管理员访问。对于这一点,我做了的命名testAdmins一个新的小组,当我检查,如果用户可以访问一个网页,我用这个:

ClaimsPrincipal principal = User as ClaimsPrincipal; 

if (principal.Claims.Any(x => x.Type == "groups" && x.Value == "id of testAdmins")){ //code } 

而且它的正常工作与我的用户女巫这一组。

但是,当我将testAdmins的ID更改为真实组管理员的值(Admins)时,我将在网站将部署时使用,并且我不在时,服务器不显示任何内容为40秒,然后我得到这样的信息:

类型的异常“System.Web.HttpException”发生在 System.Web.dll中但在用户代码中没有处理

其他信息:无法连接到SQL Server数据库。

有人能解释我发生了什么事吗?

在此先感谢

PS:我做了一些更多的测试...当我的用户是该组中它的工作速度快,但时,它不是需要2分钟,并做了错误信息......如果有人为不知道有什么问题,有没有人有办法让来自用户的不同访问权限在Azure Active Directory的特殊组中?

回答

0

提供整个堆栈跟踪和相关源代码行(完整的堆栈跟踪包含文件名和行号!)。您面临的问题对于入职开发者(入门到ASP.NET 4.0+)非常普遍。

您的项目基于ASP.NET 4.0(或更高版本)的默认项目模板,默认情况下会使用“本地用户帐户”创建网站。该模板为用户认证/授权创建实体框架数据库上下文和本地模型。这也会在你的web.config中创建一些设置来为EF定义connectin字符串(或指示默认的)。

除此之外,您还可以通过右键单击菜单(配置Azure AD身份验证 - 在VS 2015中可用)或手动添加一堆NuGet包来添加严重的Azure AD身份验证详细信息。因此,您(不知道)是否创建了由本地帐户规定的FBA(基于表单的身份验证)以及由Azure AD身份验证规定的OpenID Connect。

SQL Server错误来自FBA(或本地用户帐户设置)配置。并没有简单的方法将其删除。

因为我看到你只是玩弄和测试的东西,我会热烈地建议你重新开始一个新的项目,并注意你的向导的第二步(在VS 2013和VS 2015都可用) - 点击“更改身份验证”,并选择“无验证”:

enter image description here

在这个干净的项目,你可以添加你Azure的AD身份验证,一切都将工作,你不会看到任何SQL Server错误(很好取决于您如何配置您的Azure AD Auth - 一些wizzards - 即多租户之一也创建EF上下文)。

+0

Omg真的吗?你确定吗?因为如果我在小组中,它是行得通的......也许他看起来太过分了,因为'principal.Claims.Any(x => x.Type ==“groups”&& x.Value = =“testAdmins的id”)'太大了? – MrPixel6

+0

ClaimPricipal的声明属性是由OpenID Connect Owin中间件初始化的收集属性。当您查询此属性时,无法访问任何数据库。而且它不会造成超时。去看看关于ClaimsPrincipal和它的Claims属性的文档,mrPixel!您还可以执行一些JustDecompile来检查ClaimsPrincipal类型,并亲眼看到没有调用DB。 – astaykov

+0

好的,谢谢你的帮助! – MrPixel6