gpt4 book ai didi

c# - Azure 通信服务 - 如何针对 Azure IAM 进行身份验证

转载 作者:行者123 更新时间:2023-12-03 04:44:16 25 4
gpt4 key购买 nike

我正在使用 Azure 通信服务发送短信和电子邮件。如果我将它与端点和访问 key 或连接字符串本身一起使用,它就可以正常工作。但是,这不是一个好的做法,我想针对 Azure IAM 进行身份验证。

说到这里,我应该在以下上下文中分配什么角色?

  1. 在 Azure 门户中,导航到要用于发送 SMS 消息的 Azure 通信服务资源。
  2. 点击左侧菜单中的“访问控制 (IAM)”选项卡。
  3. 点击“添加角色分配”按钮
  4. 做什么?

这里是文档的链接 https://learn.microsoft.com/en-us/azure/communication-services/concepts/authentication#azure-ad-authentication

我切换到以下重载:

var options = new DefaultAzureCredentialOptions
{
ExcludeInteractiveBrowserCredential = false,
ExcludeManagedIdentityCredential = true,
ExcludeSharedTokenCacheCredential = false,
InteractiveBrowserTenantId = tenantId,
InteractiveBrowserCredentialClientId = clientId,
ManagedIdentityClientId = clientId,
SharedTokenCacheTenantId = tenantId,
TenantId = tenantId,
VisualStudioTenantId = tenantId,
VisualStudioCodeTenantId = tenantId
};
var tokenCredentials = new DefaultAzureCredential(options);

var emailClient = new EmailClient(new Uri(uri), tokenCredentials);

这是我尝试发送短信或电子邮件后收到的错误消息。

enter image description here

当我尝试执行以下操作时:az login --scope https://communication.azure.com//.default,它失败并显示以下消息:

enter image description here

请注意,这种情况仅发生在 Azure 通信服务中。还有其他服务(例如 Key Vault、AppConfiguration 等)可以与 IAM 配合良好。

代码可以工作,但使用访问 key 而不是 IAM

public sealed class AzureEmailNotificationService
{
private readonly EmailConfiguration _emailConfiguration;
private readonly EmailClient _emailClient;

public AzureEmailNotificationService(IOptions<EmailConfiguration> options)
{
ArgumentNullException.ThrowIfNull(options.Value);

_emailConfiguration = options.Value;
_emailClient = new EmailClient(new Uri(_emailConfiguration.Endpoint), new AzureKeyCredential(_emailConfiguration.AccessKey));
}

public async Task SendAsync(string subject, string message, string recipient, CancellationToken cancellationToken = default)
{
var emailContent = new EmailContent(subject) { PlainText = message };
var emailAddresses = new List<EmailAddress> { new(recipient) };
var emailRecipients = new EmailRecipients(emailAddresses);

await _emailClient.SendAsync(new EmailMessage(_emailConfiguration.From, emailContent, emailRecipients), cancellationToken);
}
}

public sealed class AzureSmsNotificationService
{
private readonly SmsConfiguration _smsConfiguration;
private readonly SmsClient _smsClient;

public AzureSmsNotificationService(IOptions<SmsConfiguration> options)
{
ArgumentNullException.ThrowIfNull(options.Value);

_smsConfiguration = options.Value;
_smsClient = new SmsClient(new Uri(_smsConfiguration.Endpoint), new AzureKeyCredential(_smsConfiguration.AccessKey));
}

public async Task SendAsync(string message, string recipient, CancellationToken cancellationToken = default)
{
await _smsClient.SendAsync(_smsConfiguration.From, recipient, message, cancellationToken: cancellationToken);
}
}

最佳答案

我尝试在我的环境中重现相同的结果并得到以下结果:

当我运行与您相同的 CLI 命令时,我得到了相同的错误,如下所示:

az login --scope https://communication.azure.com//.default

回应:

enter image description here

它打开了浏览器,登录后我再次遇到相同的错误:

enter image description here

解决该错误,请尝试首先仅运行 az login 命令来登录到您的 Azure 帐户,如下所示:

enter image description here

对于角色分配,请检查您如何创建服务主体。

如果您运行以下 CLI 命令,它将通过在订阅下分配 Contributor 角色来创建服务主体,并使用响应,如下所示:

az ad sp create-for-rbac --name <application-name> --role Contributor --scopes /subscriptions/<subscription-id>

回应:

enter image description here

现在使用上述值设置环境变量作为响应,如本MS Doc中所述。

如果您想从门户分配通信服务下的角色,请按照以下步骤操作:

转至 Azure 门户 -> 您的通信服务 -> 访问控制 (IAM) -> 添加角色分配

enter image description here

贡献者角色分配给服务主体,如下所示:

enter image description here

引用: Azure Active Directory in Communication Services | Microsoft

关于c# - Azure 通信服务 - 如何针对 Azure IAM 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75532126/

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