声称经过身份验证的用户缺少数据

杰森·埃文斯

我们有一个 ASP.NET (Framework v4.7.2) 网站,该网站通过 Azure Active Directory 使用联合登录,用于 SSO 目的,对用户进行身份验证。

该网站希望用户位于某个 Active Directory 组中,以便访问该站点。我自己和另一个用户在同一个组中,但是当我们都访问该站点时,我们得到了不同的结果。我可以访问该站点,但我的同事收到了“401 unathorised”错误页面(通过 返回AuthorizeAttribute)。

深入研究这一点,我可以将我所属的 AD 组作为声明包含在此集合中

System.Security.Claims.ClaimsPrincipal.Current.Claims

但是对于我的同事来说,缺少相同的群体声明。

我有一些调试代码可以做到这一点......

foreach (var claim in System.Security.Claims.ClaimsPrincipal.Current.Claims)
{
    if (string.Equals("the-object-id-of-the-group", claim.Value))
    {
        // User has the group claim...
    }
}

当我登录时,我看到一条日志消息,说明我拥有该组声明,但我的同事在登录时没有看到该消息。

在 Chrome DevTools 中查看我们对站点的请求时,我可以看到一堆set-cookie细节的不同例如,我的请求包含AdminFedAuth比我的同事更多的set-cookie 调用,并且我同事的整体内容长度要短得多。

虽然我的同事是比我更多的 AD 组的成员,但这没有什么区别,因为其他人可以访问该站点是比我更多的组的成员。所以我认为这可能是一个人所关联的群体数量的问题,但事实并非如此。

我被困在还有什么要调查的问题上以诊断问题所在。任何建议将不胜感激。

杰森·埃文斯

答案是我必须更改 Azure Active Directory 中应用程序注册的清单。

在清单中我改变了

"groupMembershipClaims": "SecurityGroup"

"groupMembershipClaims": "ApplicationGroup"

使用SecurityGroup导致不一致的组声明数据返回到网站。通过使用ApplicationGroup特定于应用程序的所有组声明被返回,从而解决了一些经过身份验证的用户无法访问站点的问题。

供参考...

为组属性配置 Azure AD 应用程序注册

编辑:

另一个很好的参考是这个 StackOverflow 问题......

Azure AD 不发出组声明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

允许经过身份验证的用户仅查看其数据

负载测试经过身份验证的用户

从经过身份验证的用户获取CognitoId

CouchDB“经过身份验证的用户”角色

限制对经过身份验证的用户的访问

在ASP.NET MVC中获取经过身份验证的身份用户数据

使用经过身份验证的用户的laravel验证5.1

Django用户的DetailVew影响经过身份验证的用户

ReactJS-如何从Node js API获取经过身份验证的用户数据?

仅使用经过身份验证的用户android写入Firebase数据库

注销后如何停止会话缓存经过身份验证的用户数据

如何将经过身份验证的用户名保存到数据库中

如何在Firebase中经过身份验证的用户和数据库之间链接?

Passport.ls/Mysql - 获取经过身份验证的/当前用户数据

经过身份验证的用户电子邮件的 Firestore 数据库规则

MySQL Sugar语法可创建经过身份验证的全特权用户及其数据库

如何检索关联以及经过身份验证的用户数据?

如何从Blazor中的数据库获取经过身份验证的用户

Firebase将经过身份验证的用户添加到数据库

如何在Blazor应用程序中仅对经过身份验证的用户响应图像数据?

在REST中返回经过身份验证的用户数据

如何检查,如果从数据库数组中经过身份验证的用户

经过SSL身份验证的用户如何通过UDP数据包证明真实性?

将经过身份验证的Facebook用户存储在数据库中

如何仅在GraphRepository中获取经过身份验证的用户拥有的数据

Django - 如何将当前经过身份验证的用户与表单提供的数据相关联

在 Vue 应用程序中为经过身份验证的用户获取数据的最佳位置?

即使禁用了经过身份验证的用户,Firebase 数据库调用也能正常工作

如何为经过身份验证的用户和未经身份验证的用户建立路由