You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET中获取Azure管理令牌并检查Azure B2C域名可用性?

.NET中程序化检查Azure AD B2C域名可用性的实现步骤

一、准备工作

  • 给.NET项目安装Azure.Identity NuGet包(推荐用这个库处理Azure身份验证,适配本地开发、生产托管等多种场景):
    dotnet add package Azure.Identity
    
  • 确认你的身份(本地开发用Azure CLI登录的账号,或生产环境的托管标识/服务主体)拥有调用Azure管理API的权限,至少需要Microsoft Azure Active Directory资源的Directory.Read.All权限,或对应Azure RBAC权限。

二、获取Azure管理API的访问令牌

用DefaultAzureCredential可以自动适配本地开发(Azure CLI、Visual Studio登录态)和生产环境(托管标识、服务主体),无需硬编码凭证:

using Azure.Identity;
using System.Threading.Tasks;

public async Task<string> GetAzureManagementAccessToken()
{
    const string resource = "https://management.azure.com/";
    var credential = new DefaultAzureCredential();
    
    var token = await credential.GetTokenAsync(
        new Azure.Core.TokenRequestContext(new[] { $"{resource}.default" })
    );
    
    return token.Token;
}

如果需要指定服务主体信息(比如生产环境专用),可修改DefaultAzureCredential参数:

var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    TenantId = "你的租户ID",
    ClientId = "服务主体Client ID",
    ClientSecret = "服务主体Client Secret"
});

三、调用Azure管理API检查域名可用性

构造POST请求到域名检查端点,传入待验证的域名信息:

using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

public async Task<bool> CheckDomainAvailability(string subscriptionId, string domainName)
{
    var accessToken = await GetAzureManagementAccessToken();
    
    using var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    
    var apiUrl = $"https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.AzureActiveDirectory/checkDomainAvailability?api-version=2020-01-01-preview";
    
    var requestBody = new
    {
        name = domainName,
        type = "Managed"
    };
    
    var jsonContent = new StringContent(
        JsonSerializer.Serialize(requestBody),
        Encoding.UTF8,
        "application/json"
    );
    
    var response = await httpClient.PostAsync(apiUrl, jsonContent);
    response.EnsureSuccessStatusCode();
    
    var responseContent = await response.Content.ReadAsStringAsync();
    var result = JsonSerializer.Deserialize<DomainAvailabilityResult>(responseContent);
    
    return result?.IsAvailable ?? false;
}

// 反序列化API响应的模型类
public class DomainAvailabilityResult
{
    public bool IsAvailable { get; set; }
    public string Reason { get; set; }
    public string Message { get; set; }
}

四、使用示例

var subscriptionId = "你的Azure订阅ID";
var domainToCheck = "example.onmicrosoft.com";
var isAvailable = await CheckDomainAvailability(subscriptionId, domainToCheck);

Console.WriteLine($"域名 {domainToCheck} 是否可用:{isAvailable}");

注意事项

  • 确保账号/服务主体有权限访问目标Azure订阅,且能调用Microsoft.AzureActiveDirectory/checkDomainAvailability操作。
  • 若有更新的稳定API版本,可替换2020-01-01-preview。
  • 域名不可用时,Reason字段会返回具体原因(如"AlreadyExists"),可据此做更细致的错误处理。

内容的提问来源于stack exchange,提问作者Piotr Nowak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:43:20