我已经安装了Azure Portal,并为我的Web API提供了应用程序注册和相关的托管身份。尽管看起来很混乱,但我还是能够部署我的应用程序,我测试了一个基本命令来提取我的Azure租户中的用户列表,如下所示,代码被注解掉了。我正在使用服务帐户的一切,但我想拉日历为特定的用户,并查看他们的数据,它回来了以下错误:
“内容类型text/html没有要解析的注册工厂”
然后,我尝试它拉用户的电子邮件,并得到了相同的错误时,试图返回结果。我在企业应用程序中的权限如下:
代码如下:
[HttpGet(Name = "GetCalendar")]
[OktaAuthorizeAttribute]
[EnableRateLimiting("api")]
public async Task<IActionResult> Get()
{
var credential = new ChainedTokenCredential(
new ManagedIdentityCredential(),
new EnvironmentCredential());
string[] scopes = new[] { "https://graph.microsoft.com/.default" };
var graphServiceClient = new GraphServiceClient(
credential, scopes);
List<MSGraphUser> msGraphUsers = new List<MSGraphUser>();
try
{
//var result = await graphServiceClient.Users["dfasdfdfdsafklsaf-dfsdaf-sdfdf-d"].Events.GetAsync((requestConfiguration) =>
//{
// requestConfiguration.QueryParameters.Select = new string[] { "subject", "body", "bodyPreview", "organizer", "attendees", "start", "end", "location" };
//});
var result = await graphServiceClient.Users["dfasdfdfdsafklsaf-dfsdaf-sdfdf-d"].Messages.GetAsync();
//var users = await graphServiceClient.Users.GetAsync();
return Ok(result);
}
catch (Exception ex)
{
string msg = ex.Message;
return Ok(msg);
}
}
我是否在一般情况下或在代码中错误地使用了服务帐户?我知道要做的事情代表用户我会授权流和我使用的客户端凭据流,但当我看这些权限的描述,我设置(即calendar.readwrite:允许应用程序在没有登录用户的情况下创建、读取、更新和删除所有日历的事件。)这让我觉得我应该有权访问所有用户,即使是下面的用户。
我在想它可能是使用用户[""],我尝试了电子邮件地址,也从用户查询的ID,我能够拉原来,因为它给它和什么都没有。
1条答案
按热度按时间gzszwxb41#
我同意@Nick.McDermaid,这不是授权问题。
我创建了一个Azure Web App并打开了Identity,如下所示:
现在,我为Enterprise应用程序分配了权限,如下所示:
通过Kudu生成访问令牌如下:
通过解码令牌,检查访问令牌是否具有正确的权限:
我尝试使用上述访问令牌成功检索用户:
如果响应不是预期的格式,即响应必须是JSON格式,则通常会出现错误“Content type text/html does not have a factory registered to be parsed”。
错误可能由以下几个原因导致:
application/json
。要解决错误,请安装Fiddler并检查Web应用程序与Microsoft Graph API之间的HTTP流量。
您还可以使用 Sébastien Levert 的Microsoft Graph Developer Proxy来检查Microsoft Graph请求的详细信息。
newtonsoft.json
库并检查。如果上述更改后问题仍然存在,请使用授权代码流进行检查。
更新:
要解决此问题,请升级到业务包,将用户分配到许可证,然后进行设置。
参考:
Glen Scales的azure - Content type text/html does not have a factory registered to be parsed。