为经过身份验证的用户声明数据丢失
Claim data missing for authenticated users
我们有一个 ASP.NET(框架 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
返回所有特定于应用程序的组声明,从而解决了一些经过身份验证的用户无法访问该站点的问题。
供参考...
Configure the Azure AD Application Registration for group attributes
编辑:
另一个很好的参考是这个 Whosebug 问题...
我们有一个 ASP.NET(框架 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
返回所有特定于应用程序的组声明,从而解决了一些经过身份验证的用户无法访问该站点的问题。
供参考...
Configure the Azure AD Application Registration for group attributes
编辑:
另一个很好的参考是这个 Whosebug 问题...