gpt4 book ai didi

c# - 通过 REST API 创建 B2C 租户返回 401/未经授权

转载 作者:行者123 更新时间:2023-12-03 02:22:04 26 4
gpt4 key购买 nike

我想要做什么:通过 REST API 创建和配置 B2C 租户.

我做了什么:

我在默认目录中创建了一个名为 CDTester 的应用注册并为其创建了一个 key ,然后使用角色 Contributor 将其添加到目标订阅中。

我从用户 secret 中加载了一个配置对象 cfg,其中包含 CDTester 的应用程序 ID 和 secret 、我的默认目录的租户 ID 以及目标订阅的 ID。

在代码中,我使用 ConfidentialClientApplicationBuilder 进行身份验证。

然后我使用我得到的 token 来做一些事情:

  1. 我检查特定资源组是否存在
  2. 如果它不存在,我就创建它
  3. 我检查所需的 B2C 租户名称是否可用
  4. 我(尝试)创建租户。

步骤 1-3 工作正常。但第 4 步给了我一个 401/Unauthorized。响应正文的格式为内容类型 HTML(而不是 JSON),并且仅包含

You do not have permission to view this directory or page.

因为步骤 1-3 有效,所以我知道我的身份验证正确。我什至可以访问 B2C 特定 API(我在步骤 3 中使用)。

接下来,我进入门户并让 CDTester 成为订阅的所有者,因此不应该有任何不允许它执行的操作。唉,没有用,我得到了同样的结果。

作为引用,以下是我的代码的相关部分:

// getting the access token
var app = ConfidentialClientApplicationBuilder
.Create(authConfig.ApplicationId)
.WithTenantId(authConfig.LoginTenantId)
.WithClientSecret(authConfig.ApplicationSecret)
.Build();
var authResult = await app.AcquireTokenForClient(new[] {"https://management.azure.com/.default"})
.ExecuteAsync();

// I use FlurlHttp and set the token
FlurlHttp.Configure(s => s.BeforeCall = c => c.Request.Headers.Add("Authorization", $"Bearer {authResult.AccessToken}"));

// this call works just fine
var nameAvailabilityResponse = await $"https://management.azure.com/subscriptions/{authConfig.SubscriptionId}/providers/Microsoft.AzureActiveDirectory/checkNameAvailability?api-version=2019-01-01-preview"
.PostJsonAsync(new
{
name = creation.FullDirectoryName,
countryCode = creation.CountryCode
})
.ReceiveJson();
if (!nameAvailabilityResponse.nameAvailable)
{
await Console.Error.WriteLineAsync(nameAvailabilityResponse.message);
return ExitCodes.DirectoryNameIsNotAvailable;
}

var displayName = creation.EnvironmentName == "production"
? "DEON"
: $"DEON - {creation.EnvironmentName.ToUpperInvariant()}";


// this one gives the 401
var creationResponse = await $"https://management.azure.com/subscriptions/{authConfig.SubscriptionId}/resourceGroups/{creation.ResourceGroupName}/providers/Microsoft.AzureActiveDirectory/b2cDirectories/{creation.FullDirectoryName}?api-version=2019-01-01-preview"
.AllowAnyHttpStatus()
.PutJsonAsync(new
{
location = "Europe",
properties = new
{
createTenantProperties = new
{
countryCode = creation.CountryCode,
displayName
}
},
sku = new
{
name = "Standard",
tier = "A0"
}
});



谷歌搜索带来的相关点击量为零,甚至只是半相关点击量。现在我被困住了。

最佳答案

基于此处提供的答案:https://learn.microsoft.com/en-us/answers/questions/481152/creating-azure-b2c-tenant-via-rest-api-fails-with.html ,您似乎无法使用服务主体创建 Azure AD B2C 租户(至少截至目前)。

您需要在实际用户的上下文中执行此请求。换句话说,您需要获取 token 才能执行具有 user_impersonation 范围的服务管理 API,而服务主体无法实现这一点。

关于c# - 通过 REST API 创建 B2C 租户返回 401/未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68453220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com