我试图在Azure AD B2C中为用户的自定义扩展属性添加/更新值。该属性是一个AccountNumber,类型为字符串。我正在使用两个不同的Azure环境。一个用于我的本地/临时环境,另一个用于客户的生产Azure环境。我的本地和暂存工作正常,但是我似乎无法通过生产实例来更新此属性,这使我认为我缺少Azure实例本身(而非代码)中的某种权限/配置,但是让我们看看。
以下是我在Azure中采取的步骤:
在应用注册中(不是旧版),我也添加了我的应用。它确实有一个警告,说明尚未在B2C中得到支持,但是我在登台实例中也有此警告。对于为该应用程序选择的API权限,我具有以下内容。我来回添加了offline_access,openid和个人资料。 (所有都是经过Microsoft Graph授权的)
在“应用程序注册/身份验证”标签中,我启用了隐式授权流程,并检查了访问令牌和ID令牌
Web.config
<add key="ida:NonAdminScopes" value="User.Read User.ReadWrite" />
<add key="ida:AdminScopes" value="Directory.AccessAsUser.All User.ReadWrite.All Group.ReadWrite.All" />
这是我要建立并提出要求的地方。是的,我意识到我正在以一种更加手动的方式进行操作,但是我也正在与Sitecore一起工作,这要求我保留一些较旧的dll,而这正是我在无奈的日子里登陆的地方。
private async Task<string> SendGraphPatchRequest(string json, string objectId)
{
var graphEndpoint = new Uri(string.Format("https://graph.microsoft.com/v1.0/{0}/users/{1}", Tenant, objectId));
HttpResponseMessage response;
using (var httpClient = new HttpClient { BaseAddress = graphEndpoint })
{
using (var requestMessage = new HttpRequestMessage(new HttpMethod("PATCH"), graphEndpoint))
{
var token = await GetOrCreateAccessToken();
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
if (!string.IsNullOrEmpty(json))
{
requestMessage.Content = new StringContent(json, Encoding.UTF8, "application/json");
}
response = await httpClient.SendAsync(requestMessage).ConfigureAwait(continueOnCapturedContext: false);
if (!response.IsSuccessStatusCode)
{
string error = await response.Content.ReadAsStringAsync();
Logger.Error(string.Format("Error -> RequestMessage: {0}", error));
object formatted = JsonConvert.DeserializeObject(error);
throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented));
}
}
}
return response.Content.ReadAsStringAsync().Result;
}
正在创建访问令牌的行确实使用ClientCredentials
_accessToken = await _authContext.AcquireTokenAsync("https://graph.microsoft.com/", _credentials);
请求正文内容的示例
{"extension_[extensionAppId]_AccountNumber":"123456"}
当我尝试通过Postman发出此请求时(我有一行代码记录了根据上述代码段创建的令牌-不确定是否会实际工作),这是响应我回来了:
{
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "####",
"date": "2019-08-21T15:06:45"
}
}
}
答案 0 :(得分:0)
对MS Graph API的App Reg权限不正确。 可能您已同意开发租户中的其他权限,然后在以后取消选择它们,但这不会删除同意。
由于您在代码中使用客户端凭据,因此在“应用程序”权限下添加了读/写目录,因此在此,已授权的权限将不起作用。保存新的权限后,还请单击“授予权限”。