让我们看看各位专家是否知道这里发生了什么。
上下文
我们有一个在 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/