asp.net - O数据错误: "A value without a type name was found and no expected type is available." when calling Azure Active Directory Graph API

标签 asp.net azure active-directory openid azure-active-directory

让我们看看各位专家是否知道这里发生了什么。

上下文

我们有一个在 Azure 网站上运行的 Web 应用程序。此 Web 应用程序使用 OWIN + OpenID Connect 根据 Azure Active Directory 租户对用户进行身份验证。该应用程序还使用 Azure AD Graph API 来收集目录的一些数据。

我们的代码基于 GitHub 中提供的示例项目:https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet

问题

几个小时前,Web 应用程序运行良好(对 AD 进行身份验证并从目录中获取数据),但随后最奇怪的事情发生在我们身上。今天,我们发现我们仍然可以针对 AD 进行身份验证,但 Graph API 几乎随机抛出错误。

当尝试以同步方式通过 ObjectId 获取特定用户时,我们将错误追溯到特定请求:

Claim claimObject = ClaimsPrincipal.Current.FindFirst(Helper.Constants.ADTenant.ObjectIdClaimType);
string userObjectID = claimObject == null ? string.Empty : claimObject.Value;
ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();
List<IUser> users = client.Users.Where(u => u.ObjectId == userObjectID).ExecuteAsync()
    .Result.CurrentPage.ToList();

问题是最后一行抛出了有关 OData 模型的异常:

"A value without a type name was found and no expected type is available. When the model is specified, each value in the payload must have a type which can be either specified in the payload, explicitly by the caller or implicitly inferred from the parent value."

我们开始将最后一行代码分成如下几部分:

IReadOnlyQueryableSet<IUser> queryUsers = client.Users.Where(u => u.ObjectId == userObjectID);
IPagedCollection<IUser> pagedUserCollection = queryUsers.ExecuteAsync().Result;
List<IUser> users = pagedUserCollection.CurrentPage.ToList();

发现异常在这一行中抛出:

IPagedCollection<IUser> pagedUserCollection = queryUsers.ExecuteAsync().Result;

最奇怪的是,这条线昨天执行得很好,今天开始失败,没有任何解释。

有人知道我们做错了什么吗?为什么今天开始失败?

备注

我们正在使用 api-version=2013-11-8。我们将 Azure AD Graph API 客户端库保留在版本 1.0 上,如 GitHub 上的示例所示。

最佳答案

各位,

首先 - 对于引入这个问题深表歉意。根本问题是实体(在本例中为用户实体)在服务端更新为新集合 (AlternativeSignInNamesInfo)。通常,添加新实体、属性、集合和复杂类型不应导致客户端库发生重大更改。然而,由于 ODatalib 中的问题,未知集合不会被简单地忽略。
我完全同意对此的看法,我们绝对不希望依赖图形客户端库的应用程序遭受任何中断。我们正在与 ODatalib 团队合作纠正此问题,以便这不再是我们的 Graph 客户端库向前发展的问题。

与此同时,我们正在回滚我们的 Graph 服务,以便 2.0.5 应该再次开始工作。版本 2.0.6 也应该可以工作 - 只要您不尝试发布到 User 对象 (AlternativeSignInNamesInfo) 上的新集合。

更新:图形服务已回滚。我还验证了通过 Graph Client Library 2.0.5 和 2.0.6 获取用户都可以。

希望这对您有所帮助,对于此处引起的任何问题,再次表示歉意。

关于asp.net - O数据错误: "A value without a type name was found and no expected type is available." when calling Azure Active Directory Graph API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030118/

相关文章:

azure - 多个身份验证提供商拥有

Docker 容器中的 Azure DevOps 自托管代理

javascript - 使用查询从 li 元素获取 Html.ActionLink 参数

c# - 了解 Web.config 文件中的 ASP.NET 程序集引用管理

azure - 角色内、共置缓存和 CacheService.exe

java - 使用 JDBC(Java) 的 Active Directory 密码连接

c# - Active Directory 检查用户是否登录

windows - PowerShell 将 AD objectGUID 复制到 ms-ds-consistencyguid

javascript - 将 jquery.slideToggle() 与 Knockout JS 结合使用

Javascript 数组发送到 asp.net MVC Controller